Le mercredi 22 Septembre 2004 15:53, Edgar Bonet a écrit :
> En gros le problème qui se posait, et je suppose que c'est le même pour
> toi, est dans le fait que tu dois faire de la programmation
> évenmentielle. Dans un programme en ligne de commande, tu peux souvent
> te permettre de faire des read() et des write() bloquants sur ton port
> série, alors que pour un programme graphique tu évites les appels
> bloquants et tu remets à la boucle d'évennements pour le contrôle de la
> séquence du programme. La solution consiste à dire à ton toolkit que tu
> veux lire, ou écrire, sur le port série. Celui-ci se chargera alors de
> produire un évennement quand le port est prêt pour une lecture ou
> écriture non bloquante, et appelera alors le callback que tu lui as
> donné.
> [...]
> Ici le truc important c'est gdk_input_add(). C'est ici que tu demandes à
> GTK de produire un évennement à chaque fois qu'il y a des données qui
> sont arrivées sur le port. Le troisième paramètre est ton callback qui
> sera appelé pour lire et traiter ces données. C'est très similaire de ce
> qu'on fait avec select(2), et d'ailleurs il y a probablement un select()
> sous le capot de gtk_main() (et un FD_SET() sous celui de
> gdk_input_add()).
>
> Il ne te reste plus qu'à trouver l'équivalent Qt de gdk_input_add().
Je ne suis pas sûr qu'utiliser des trucs spécifiques à un toolkit graphique
soit une bonne idée lorsque l'on peut le faire de façon plus portable. Dans
ce cas précis, je préconiserais plutôt d'utiliser select dans un thread
indépendant pour lire la ligne série. De cette façon, si tu décides de
changer de toolkit, tu n'as pas à tout refaire.
Pour aller un peu plus loin, je te conseille de regarder du côté du pattern
Model-View-Controller, pattern qui permet de bien découpler la partie
applicative de la partie affichage. En plus, j'ai vu que Trolltech avait
intégré ça dans Qt 4.0 (pas encore sortie) :
http://doc.trolltech.com/4.0/model-view-programming.html
--
Frédéric