Bonjour,

je ne suis pas un expert dans le multhreading et j'aurais donc voulu savoir s'il fallait faire des choses spécifiques pour que la méthode WaitForSingleObject( H_mutex , 0 ) retourne l'évènement WAIT_ABANDONED.
Pour le moment quand mon mutex est pris par un autre thread, en retour j'ai WAIT_TIMEOUT.

Declaration de mon Mutex:
--------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
H_mutex_RAZ = CreateMutex(NULL, FALSE, "MRAZ");

Boucle de mon thread de travail:
-------------------------------
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
39
40
while( ((tCourant - mTpsDebutMS) < mDureeMS) && (Terminated == false) )
{
    vResWaitMutex = WaitForSingleObject( H_mutex_RAZ , 0 );
 
    switch( vResWaitMutex )
    {
        case WAIT_ABANDONED :
            vFichierTrace << "WaitForSingleObject = WAIT_ABANDONED" << endl;
            usb->acquerrir(vTabData);
        break;
 
        case WAIT_OBJECT_0 :
            vFichierTrace << "WaitForSingleObject = WAIT_OBJECT_0" << endl;
            for(int iV = 0; iV < mNbVoie; ++iV)
            {
                SONWriteADCBlock(mHFile, iV, vTabData, vLgBuff, mCptData*vLgBuff);
            }
            ++mCptData;
 
            ReleaseMutex( H_mutex_RAZ );
        break;
 
 
        case WAIT_TIMEOUT :
            vFichierTrace << "WaitForSingleObject = WAIT_TIMEOUT" << endl;
        break;
 
 
        case WAIT_FAILED :
            vFichierTrace << "WaitForSingleObject = WAIT_FAILED" << endl;
        break;
 
 
        default :
            vFichierTrace << "WaitForSingleObject = default" << endl;
        break;                    
    }
 
    tCourant = GetTickCount();
}

Thread de RAZ prenant le mutex:
--------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
WaitForSingleObject( H_mutex_RAZ , INFINITE );
 
mCptData = 0 ;
 
SONCommitFile(mHFile, true);
 
SONEmptyFile( mHFile );
 
SONSave(mHFile, -1, 0, true);
 
Sleep(5000);  // pour test de WaitForSingleObject
 
ReleaseMutex( H_mutex_RAZ );

Tout ceci est un prog de test.
Dans la réalité, pendant que mon thread de RAZ s'execute, le thread de travail doit continuer à faire de l'acquisition de données sur l'USBafin d'éviter un engorgement au niveau de FIFO liées à l'USB.

Merci