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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
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.
Partager