Bonjour � tous

Je regardais un exemple d'utilisation de Thread dans la FAQ : FAQ Thread

Voil� o� se trouve ma question :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// IMPORTANT: si vous appelez des fonctions membres
// ou modifiez des donn�es membres de CWorkerThread
// veillez � que leur utilisation soit thread safe
// car Execute() s'execute dans un autre thread contrairement
// aux autres fonctions qui sont appel�es depuis le thread principal
// En particulier, il ne faut surtout pas appeler Stop()
UINT CWorkerThread::Execute()
{
    // exemple de code � ex�cuter

    DWORD start = ::GetTickCount();
   
    do
    {   
        // code de traitement
        ::Sleep( 1000 ); // simuler une op�ration de 1 sec

        // Faire appel � un CALLBACK
        m_pCallBackFct(...)
    } while ( this->m_StopThread == false ) ;

    DWORD end = ::GetTickCount();

    // renvoyer un r�sultat : temps d'ex�cution
    this->ExecutionTime = end - start;
   
    return 0;
}

// m_pCallBackFct pointe sur une fonction du genre...
void MyFunction()
{
     if (...)
     {
        MyWorkerThread.Stop();
     }
}
** En rouge **
� 2-3 reprises il m'est arriv� qu'il �tait N�CESSAIRE que je puisse arr�ter le thead (donc appeler STOP) � l'int�rieur de ma fonction WorkerThread. Donc, exactement ce qu'il ne faut pas faire puisque cela provoquerait un Dead Lock.

Un des bonnes exemples que je puisse trouver c'est en .NET lorsqu'on utilise l'objet SerialPort, on a un Callback qui est appel� lorsque des donn�es sont lu et � l'int�rieur de cette �v�nement on peut appeler m_SerialPort.Close(), qui lui arr�ter le thread de lecture.

Avez-vous des suggestions quand � une solution ?