Mog a écrit a écrit :
Comment qu'on fait ?
Je ne trouve pas d'équivalent à sema_post / sema_wait dans la MDSN.
Je ne trouve que des classes. Mais je travaille en C et non en C++.
Il me faut protéger l'accès à un fichier des accès multiples par différents threads.
Comment faire ?
|
Tu peux utiliser les Mutex.
Pour ça tu fais
A l'entrée dans le Tread principal, tu fais
Code :
- hMutex = CreateMutex(NULL,FALSE,NULL);// à voir pour les paramètres
|
Ensuite, quand tu veux garantir un accès unique, tu fais un appel à cette fonction:
Code :
- BOOL enter_single_thread(HANDLE hMutex)
- {
- BOOL bResult=FALSE;
- if (hMutex!=NULL)
- {
- long lgReponse;
- long inc=12; // max wait
- do {
- rep=WaitForSingleObject(hMutex,60000); // wait 1 s
- inc --;
- } while (lgReponse != WAIT_OBJECT_0 && inc > 0);
- switch (lgReponse) {
- case WAIT_OBJECT_0 :
- bResult = TRUE;
- break;
- case WAIT_ABANDONED :
- bResult = FALSE;
- break;
- case WAIT_TIMEOUT :
- bResult = FALSE;
- break;
- }
- }
- if ((! bResult) && (pCtxt != NULL))
- {
- // Trop d'attente, laisser tomber
- }
- return (bResult);
- }
|
Et n'oublies pas aussi, quand l'accès unique est terminé, de faire un ReleaseMutex.
Ce que je te file là, c un vieu truc, ms ça marche bien.
Mais si tu l'utilises pas comme ça, ça peut déja te donner des idées.
Bonne chance.
[jfdsdjhfuetppo]--Message édité par el_gringo le 28-05-2002 à 09:46:41--[/jfdsdjhfuetppo]