Dialog in Multithreading

Dialog in Multithreading

Messaggioda Nadir » 29 mag , 2012 1:13 pm

Ciao a tutti,
dovrei creare una dialog di attesa mentre un software effettua certe azioni:
Codice: Seleziona tutto
...
ShowWait();                     // Visualizzo la dialog
//operazioni varie
...
HideWait();                     //Nascondo la dialog


Questa dialog ha però delle immagini che cambiano sequanzialmente e se non effettuo dei QApplication::processEvents() la finestra non viene aggiornata...

Stavo provando a sfruttare il multithreading ma senza successo, so che gli eventi della GUI devono essere nel loop principale infatti in tutti i modi che ho provato o ho errori per i signal/slot tra thread o l'animazione non si muove...

In parole povere devo solo visualizzare una dialog che si autoaggiorna ogni secondo (con un QTimer)indipenentemente dal flusso principale...

N.B: Non posso richiamare ProcessEvents() in qualto il grosso del lavoro è eseguito in funzioni di una libreria che non devo modificare

Qualche idea?

Grazie Nadir
Nadir
Troll svezzato
 
Messaggi: 68
Iscritto il: 20 mar , 2012 1:18 pm
Località: Bergamo
Programmo in: C++

Re: Dialog in Multithreading

Messaggioda Nadir » 29 mag , 2012 1:59 pm

Sono riuscito invertendo il concetto ovvero eseguendo in un thread il lavoro e nel flusso principale le operazioni della dialog, es:

Codice: Seleziona tutto
   // r e fileName sono due parametri per questa funzione
   dlgWait w(this);
   w.show();
   Application::processEvents();
   Work work(r,fileName);
   work.start();
   while(!work.wait(100)){
      w.OnTimer();    // Questa era la funzione che doveva essere richiamata dal timer, cambia l'immagine visualizzata
      Application::processEvents();
   }
   int ret=work.ret;

dove Work:

Codice: Seleziona tutto
class Work : public QThread{
    tpImage *r;
    QString fileName;
public:
    Work(tpImage *r,QString fileName){this->r=r;this->fileName=fileName;};
    int ret;
public:
     void run(){
      ret=r->Load(fileName,TRUECOL24);
     }
};


facendo così però non ho la semplicità che cercavo con ShowWait e HideWait, e devo creare una classe ereditata da QThread ogni volta che voglio visualizzare la dialog...

Altre Idee/Suggerimenti?

Grazie
Nadir
Troll svezzato
 
Messaggi: 68
Iscritto il: 20 mar , 2012 1:18 pm
Località: Bergamo
Programmo in: C++


Torna a Qt & C++

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti