BOOL WINAPI QuerySemaphore(
HANDLE hSemaphore,
LPLONG lpCount)
{
SEMAINFO SemInfo;
UINT RetLen;
NTSTATUS Status;
Intern setzt die Funktion alle obligatorischen Felder für den Aufruf der Funktion NtQuerySemaphore() und fragt den Rückgabewert der Funktion ab und setzt diesen auf ein boolsches Ergebnis um.
Status = NtQuerySemaphore(
hSemaphore,
SEMAQUERYINFOCLASS,
&SemInfo,
sizeof SemInfo,
&RetLen);
if( !NT_SUCCESS(Status) )
{
*lpCount = -1;
return FALSE;
}
else {
*lpCount = SemInfo.Count;
return TRUE;
}
}
Zum Einlinken der Funktion kann auf die Headerdateien NATIVE.H und QuerySemaphore.h zurückgegriffen werden, so daß nicht die gesamte Bibliothek ntdll.lib zum Linken notwendig ist.
Da die Funktion QuerySemaphore() letztlich nur eine Hülle um die Funktion NtQuerySemaphore der Bibliothek NTDLL.DLL bildet, steht diese Funktion jedoch nur unter Windows NT zur Verfügung.
Ein Beispiel für das Einbinden und Anwenden der Funktion wird nachfolgend aufgezeigt. Zunächst wird die Semaphore erzeugt.
#include "QuerySemaphore.h"
LONG Value;
// Semaphore erzeugen
HANDLE Handle = CreateSemaphore(NULL, 4, 10, NULL);
Abschließend kann der Wert der Sempahore abgefragt werden.
// Inhalt der Semaphore abfragen
QuerySemaphore(Handle, &Value);
Die Abfrage ist natürlich auch während der Lebensdauer der Semaphore möglich, denn der Einsatz der Semaphore macht ja erst bei asynchronem Programmablauf Sinn.
// Semaphore abwarten
WaitForSingleObject(Handle, INFINITE);
// Inhalt der Semaphore erneut abfragen
QuerySemaphore(Handle, &Value);
|