VB 6.0 - Semaphore

Shadow

Mitglied
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:

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
 
Zurück