programmation Qt -> threads - GUI

programmation Qt -> threads - GUI - C++ - Programmation

Marsh Posté le 11-12-2003 à 12:18:57    

Dans un application,
j'ouvre une fenêtre avec une barre de progression,
pour attendre que quelque chose se termine.
Voici le code :  

Code :
  1. WaitProgress::WaitProgress(QWidget *parent, const char *name) : WaitProgressDlg(parent,name,TRUE) {
  2. QThread::start();
  3. }
  4. WaitProgress::~WaitProgress(){
  5. }
  6. void WaitProgress::run() {
  7. for(;;) {
  8.  mycond.wait();
  9.  ProgressBar->setProgress(0);
  10.  this->show();
  11.  int progress=0;
  12.  for(int i=0; i<WaitSec;i++) {
  13.   myWait(1,0);
  14.   ProgressBar->setProgress((progress+=1));
  15.  }
  16.  this->hide();
  17. }
  18. }
  19. void WaitProgress::Affiche(char *texte,int Sec) {
  20. WaitSec=Sec;
  21. ProgressBar->setTotalSteps(Sec);
  22. TextLabel->setText(texte);
  23. mycond.wakeOne();
  24. }


 
Cette classe fonctionne,
mais parfois la fenêtre ne se ferme pas,
elle reste en permanence à l'écran.
Ca ne fait pas planter le programme,
mais c'est gênant tout de même.
 
Ce que je ne comprend pas,
c'est que j'appelle systématiquement la méthode hide,
sans aucune condition.
Et dans le processus qui appelle cet objet,
je ne le tue pas.
Donc la fenêtre devrait se fermetr à chque fois,
sans exception.
 
Quelqu'un a une idée ?


Message édité par warp le 12-12-2003 à 09:19:16

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

Marsh Posté le 11-12-2003 à 12:18:57   

Reply

Marsh Posté le 11-12-2003 à 14:31:05    

euh c'est quoi cette boucle infinie ?

Reply

Marsh Posté le 11-12-2003 à 21:08:34    

Exacte, ta fonction est appelée a intervalle régulier, ta boucle infinie n'a rien à faire dans le cas présent.

Reply

Marsh Posté le 12-12-2003 à 09:17:13    

C'est ainsi que sont gérés les threads,
cf http://doc.trolltech.com/3.0/threads.html
 
Ce n'est pas réellement une boucle infinie,
puisque je m'arrête sur une espèce de mutex.
 
Je crée l'objet, qui se met en attente sur le mutex.
Dès que je le débloque, en appelant la méthode affiche,
il affiche ma barre de progression.
En principe il doit effacer la fenêtre avant de se remettre de nouveau en attente sur le mutex.


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

Sujets relatifs:

Leave a Replay

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