Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Qt multithread

1 view
Skip to first unread message

Armando

unread,
Sep 28, 2009, 11:51:09 AM9/28/09
to
Sto cercando di capire come funziona la sincronizzazione dei threads in Qt.
In pratica allocati due o pi� thread occorre poterne controllare
l'esecuzione e l'accesso alle funzioni membro.
Munita quindi la mia classe Thread di un QMutex mutex, leggo dal
tutorial le seguenti implementazioni delle funzioni membro run() e stop():

void Thread::run()
{
forever {
mutex.lock();
if (stopped) {
stopped = false;
mutex.unlock();
break;
}
mutex.unlock();
std::cerr << qPrintable(messageStr);
}
std::cerr << std::endl;
}


void Thread::stop()
{
mutex.lock();
stopped = true;
mutex.unlock();
}

stopped � una variabile booleana settata falsa da Thread::Thread().

Non ci ho capito molto :-(
Potreste aiutarmi?

Grazie!
Armando

Simone F.

unread,
Sep 29, 2009, 4:02:30 AM9/29/09
to
Armando ha scritto:

nella funzione run(), che devi immaginare eseguita in un altro thread,
si controlla, in un loop infinito, il valore della variabile "stopped".
Se � false, non viene eseguito il break e pertanto viene stampato un
messaggio a video. Se � true, viene eseguito il break e la funzione poi
termina (e con essa il thread).

In stop, viene imposto il valore della variabile a true. Questa funzione
pu� essere chiamata all'interno di run(), volendo, o da un altro thread.

Lock/unlock vari servono solo per non accedere alla variabile stopped
contemporaneamente da due thread distinti.

Armando

unread,
Sep 29, 2009, 6:37:56 AM9/29/09
to
Ma cosa fa esattamente la funzione lock di un QMutex?

void Thread::giustoPerCapire()
{
mutex.lock();
..
..
..
mutex.unlock();
}

All'atto dell'esecuzione dell'istruzione mutex.lock() la funzione
giustoPerCapire() impedisce l'esecuzione di qualunque altra funzione
membro di Thread da parte di un altro thread e l'accesso a qualunque
variabile membro di Thread da parte di un altro Thread?
O esclude solo la possibilit� che la parte di codice compresa tra le
chiamate lock e unlock sia eseguibile da pi� thread contemporaneamente?

Grazie ancora!
Armando

Simone F.

unread,
Sep 29, 2009, 6:48:32 AM9/29/09
to
Armando ha scritto:

la seconda che hai detto :-)

0 new messages