[Qt] programmation visuelle asynchrone

programmation visuelle asynchrone [Qt] - C++ - Programmation

Marsh Posté le 21-02-2003 à 08:30:51    

Je ne sais pas si le titre est clair,
je vais préciser.
 
J'ai écrit des classes en C++,
celles-ci font appel au port série,
et parfois je dois attendre quelques secondes avant d'avoir  
la réponse venant du port série.
 
On va dire pour simplifier, que dans une classe j'ai ceci

Code :
  1. writeCom(...);
  2. sleep(x);
  3. readCom(...);


 
J'ai commencé une interface graphique qui, lorsque j'appuie sur un bouton, appelle une méthode d'écriture/lecture sur le port série.
Lorsque j'ai la réponse de cette méthode, j'écris le résultat sur l'interface graphique.
 
Mais problème : pendant les x secondes de la méthode, l'interface graphique est gelée.
Si, par exemple, je veux faire bouger une barre de progression pendant les x secondes, je ne le peux donc pas.
Est-il possible de faire cela autrement qu'avec des threads ? ....ou autre ?


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 21-02-2003 à 08:30:51   

Reply

Marsh Posté le 21-02-2003 à 08:39:05    

tu peut te servir de fork mais bon c la galere pour communiquer avec la gui a partir de l'autre thread enfin si tu trouve comment faire ca facilemment je suis preneur

Reply

Marsh Posté le 21-02-2003 à 08:47:17    

warp a écrit :


Est-il possible de faire cela autrement qu'avec des threads ? ....ou autre ?


 
Les threads sont LA solution à ce type de problème. Je te conseille la lecture de cette page :  
 
http://doc.trolltech.com/3.0/threads.html
 
Qui contient un exemple de traitement par un thread avec une IHM qui continue de fonctionner correctement. N'oublie pas les                 qApp->lock(); et qApp->unlock();.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-02-2003 à 09:27:43    

Effectivement, c'est un bon exemple,
reste à l'appliquer à mon programme.
 
 :hello:


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 21-02-2003 à 19:11:50    

Ben voilà, ça fonctione.
 
....et c'est facile en plus. :)  
 
Mais maintenant j'ai un autre problème.
L'interface graphique n'est pas mise à jour au fur et à mesure.
 
Qu'à celà ne tienne, il suffit d'appeler la méthode repaint().
Eh bgien non.
ça ne fonctionne pas.
Il faut que je bouge la souris pour que l'interface soit renouvelée.
Si je ne fais rien du tout, rien ne se passe,
ou du moins pas tout le temps.
Dès que je me met à bouger la souris, là tout fonctionne.
 
Pourtant n'est-ce pas le but de la méthode repaint()  ??
J'ai aussi essayé avec update(),
mais pareil, ça ne fonctionne pas.


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 21-02-2003 à 19:24:50    

de toute facon, si repaint () ne fait rien, update () n'en fera pas plus, puisque update est juste une demande à Qt de mettre un paintEvent pour ton composant dans sa liste d'evenements.
Sans plus de code, ca sera pas facile de t'aider, mais tu peux essayer un repaint (true) pour le forcer à effacer puis réactualiser.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed