WAIT_ABANDONED n'est pas généré
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:
H_mutex_RAZ = CreateMutex(NULL, FALSE, "MRAZ");
Boucle de mon thread de travail:
-------------------------------
Code:
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:
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