Hallo!
Ich habe eine Hauptanwendung die mehrere andere Anwendungen kontrollieren kann. Nun will ich die Anzahl pro Sub-Anwendung aber minimieren - dies mache ich durch Semaphore.
code:
Die Funktionen WaitForSingleObject (decrement), ReleaseSemaphore(increment), CreateSemaphore und OpenSemaphore hole ich mir aus der kernel32.dll.
Nun habe ich folgendes Problem - mal abgesehen vom prinzipiellen Aufbau smile
Ablauf:
Die Hauptanwendung springt als erstes in diese Funktion wobei (bTicket=false) und erstellt die verschiedenen Semaphore für die jeweiligen Anwendungen - also wie wiele instanzen laufen dürfen.
wenn nun eine dieser anwendungen in diese funktion hüpf (bTicket = true), so bekommt sie von der funktion opensemaphore eine andere handle-id, womit die ganze logik nicht funktioniert. ich weiß wirklich nicht woran es liegt. könnten die rechte schuld sein?
ich hoffe jemand kann mir helfen.
mfg
Ich habe eine Hauptanwendung die mehrere andere Anwendungen kontrollieren kann. Nun will ich die Anzahl pro Sub-Anwendung aber minimieren - dies mache ich durch Semaphore.
code:
Code:
Err.Clear
Dim lSemaphoreHandle As Long
Const INFINITE As Long = &HFFFFFFFF
SEMAPHORE_ALL_ACCESS.nLength = Len(SEMAPHORE_ALL_ACCESS)
SEMAPHORE_ALL_ACCESS.bInheritHandle = 1&
SEMAPHORE_ALL_ACCESS.lpSecurityDescriptor = 0&
Const SEMAPHORE_ALL_ACCESSB = &H1F0003
Const SEMAPHORE_MODIFY_STATE = &H2
If OpenSemaphore(SEMAPHORE_MODIFY_STATE, 0, UCase("QMP" & sMutexName)) = 0 Then
lSemaphoreHandle = CreateSemaphore(0, nMaxCount, nMaxCount, UCase("QMP" & sMutexName))
ElseIf bTakeTicket = False And OpenSemaphore(SEMAPHORE_ALL_ACCESSB, 0, UCase("QMP" & sMutexName)) <> 0 Then
lSemaphoreHandle = OpenSemaphore(SEMAPHORE_MODIFY_STATE, 0, UCase("QMP" & sMutexName))
CloseSemaphore (lSemaphoreHandle)
lSemaphoreHandle = CreateSemaphore(0, nMaxCount, nMaxCount, UCase("QMP" & sMutexName))
End If
If bTakeTicket = True Then
lSemaphoreHandle = OpenSemaphore(SEMAPHORE_MODIFY_STATE, 0, UCase("QMP" & sMutexName))
iErr = WaitForSingleObject(1488, 0)
iErr = ReleaseSemaphore(1488, 1, iErr)
End If
Die Funktionen WaitForSingleObject (decrement), ReleaseSemaphore(increment), CreateSemaphore und OpenSemaphore hole ich mir aus der kernel32.dll.
Nun habe ich folgendes Problem - mal abgesehen vom prinzipiellen Aufbau smile
Ablauf:
Die Hauptanwendung springt als erstes in diese Funktion wobei (bTicket=false) und erstellt die verschiedenen Semaphore für die jeweiligen Anwendungen - also wie wiele instanzen laufen dürfen.
wenn nun eine dieser anwendungen in diese funktion hüpf (bTicket = true), so bekommt sie von der funktion opensemaphore eine andere handle-id, womit die ganze logik nicht funktioniert. ich weiß wirklich nicht woran es liegt. könnten die rechte schuld sein?
ich hoffe jemand kann mir helfen.
mfg