2011-04-04 5 views
0

Je suis en train de concevoir une application pour collecter les données de mes véhicules et les afficher sur une application. J'essaie de comprendre quelle serait la meilleure architecture de mon logiciel. Je prévois d'utiliser Qt pour mon gui (QPainter) et j'ai un matériel personnalisé qui recueille les données des capteurs. Je pensais que les E/S matérielles résidaient dans l'application qui restitue les graphiques dans son propre thread, mais maintenant je pense qu'il vaudrait mieux mettre tout le matériel E/S comm dans un processus séparé et communiquer entre les deux. processus avec un certain protocole IPC (pas sûr lequel).Affichage en temps réel des données

Qu'est-ce que vous les gars me recommandent de faire. Ce serait aussi la première fois que j'écrirais une application multi-processus.

+0

[en temps réel réel] (http://en.wikipedia.org/wiki/Real-time_computing), ou assez rapide/interactif que les gens ne se préoccuperont pas/avis? – genpfault

+0

Je voudrais que ce soit assez rapide que je veux remarquer tout retard dans les données. Essayer de remplacer le tableau de bord de ma voiture de projet avec cette application. – Talguy

+0

Ce n'est presque jamais une erreur. Le meilleur moyen de faire exploser une fusée coûteuse. –

Répondre

0

J'ai écrit ces choses des centaines de fois. De loin, la meilleure solution est de diviser le matériel dédié en deux threads ou tâches:

  • un qui fait ce sont nécessaires des opérations en temps réel
  • une autre qui répond aux requêtes de données et commandes de l'interface utilisateur

Ces deux threads coopèrent entre eux pour maintenir un espace variable partagé, protégé par sémaphore. Le deuxième thread fait tout son analyse et whatnot avant de verrouiller l'espace partagé, fait une copie de tout ce dont il a besoin, et déverrouille. L'objectif est de limiter le plus possible l'intervalle de verrouillage. Souvent, il est pratique d'organiser toutes les variables partagées dans une structure unique, et d'utiliser un memcpy() en masse, même si seulement quelques membres sont intéressants. Plus cette interaction est simple, mieux c'est.

L'interface utilisateur contient

  • écrans qui, lorsqu'il est visible et active, provoquent des requêtes périodiques au module de données

D'autres architectures sont possibles, mais chaque fois que je les ai vu, ils échoient en énormes masses de patchs à la vapeur pour contourner les problèmes de synchronisation et de synchronisation.

+0

le ferait en threads (Gui et les threads séparés par du matériel) ou en les séparant en processus distincts. Y a-t-il un avantage sur l'un ou l'autre. Comme si le processus se bloque, l'autre peut le redémarrer à nouveau. – Talguy

+0

Dépend de la plate-forme. Par exemple, en utilisant Microsoft Windows, j'utiliserais des threads dans un seul processus en raison de ses faiblesses avec la communication interprocessus. En utilisant Linux, faites-le de toute façon, ce qui vous semble plus naturel. – wallyk

+0

Ok, je prévois d'utiliser Minimal Ubuntu comme OS pour sa légèreté. Espérons que cela aidera à améliorer la réalité de l'application. – Talguy

Questions connexes