Savez vous si il est possible d'obtenir la valeur du count d'un sémaphore (nommé en l'occurence) sous windows ? (sans le modifier)
J'arrive pas à trouver de moyen...
Merci.
Version imprimable
Savez vous si il est possible d'obtenir la valeur du count d'un sémaphore (nommé en l'occurence) sous windows ? (sans le modifier)
J'arrive pas à trouver de moyen...
Merci.
Bonjour
Ce n'est pas possible (à ma connaissance) sans l'acquèrir
LONG count;
Mais de toute façon le temps de s'en servir c'est déjà peut être faux.Code:
1
2
3
4
5
6
7
8
9 if( WAIT_TIMEOUT == WaitForSingleObject(hSemaphore, 0) ) { Trace("il y quelques instants il n'y avait plus de resources disponibles"); } else { ReleaseSemaphore(hSemaphore, 1, &count); Trace("il y quelques instants il restait %d resources disponibles", ++count); }
Passo
En effet, lire le count d'un sémaphore ne sert à rien car il peut être modifié entre le moment où tu le lis et le moment où tu agis...
Bon certes il faut se méfier de ce que fait le sémaphore apres l'avoir consulté, mais dans mon cas c'était protégé (par un autre)
Le moyen de consulter sa taille est ReleaseSemaphore avec un releasecount de zero. Ca ne modifie pas le compteur et renvoie sa valeur dans un 3eme paramètre de sortie.
Bon ceci étant, dans mon exemple, je me suis aperçu que ça posait problème quand j'ai besoin de 'décrémenter' la valeur (l'inverse du release) de plusieurs crans d'un coup. (le reseter en cas d'erreur de synchro en fait)
Du coup comme j'avais une mémoire partagée sous la main, j'ai mis un int dedans et j'ai transformé le sémaphore en mutex.
Mais bon ça fait 2 objets systèmes là ou un sémaphore un peu plus souple aurait suffi.