Probleme mit Lock-Unlock-Mutex
Verfasst: 16.01.2007 13:24
Hallo,
nach langer Zeit versuche ich mich mal wieder mit der Programmierung.
Dabei ist mein Ziel, ein kleines Programm mit Threads zu schreiben.
Da das Hauptprogramm und die Threads auf gemeinsame Resourcen zugreifen sollen, habe ich mit Mutex experimentiert und habe da ein mir nicht verständliches Problem festgestellt.
Wenn ich dieses Programm (mit Debugger und Threadsichere Exe) laufen lasse, wird der Mutex, sobald das Hautprogamm ihn auch anfordert nicht wieder frei gegeben.
Sobad ich den Lock im Hauptprogramm oder den SetGadgetText in den Thread herausnehme geht alles.
Vielleicht kann mir ja jemand dabei helfen, herauszufinden, was ich falsch mache.
Ich verwende PB 4.02.
Vielen Dank,
Hugo
nach langer Zeit versuche ich mich mal wieder mit der Programmierung.
Dabei ist mein Ziel, ein kleines Programm mit Threads zu schreiben.
Da das Hauptprogramm und die Threads auf gemeinsame Resourcen zugreifen sollen, habe ich mit Mutex experimentiert und habe da ein mir nicht verständliches Problem festgestellt.
Wenn ich dieses Programm (mit Debugger und Threadsichere Exe) laufen lasse, wird der Mutex, sobald das Hautprogamm ihn auch anfordert nicht wieder frei gegeben.
Sobad ich den Lock im Hauptprogramm oder den SetGadgetText in den Thread herausnehme geht alles.
Vielleicht kann mir ja jemand dabei helfen, herauszufinden, was ich falsch mache.
Code: Alles auswählen
;- Mit Debugger on und Threadsichere Exe <<<<--------
Global Thread1.l, Thread2.l, start.l, Mutex1.l = CreateMutex()
#string1 = 1
#string2 = 2
Procedure Thread1()
Repeat
Debug "request Mutex1-Thread1"
LockMutex( Mutex1 )
Debug "lock Mutex1-Thread1 ok"
SetGadgetText( #string1, FormatDate( "%hh:%ii:%ss", Date() ) )
UnlockMutex( Mutex1 )
Debug "unlock Mutex1-Thread1"
Delay( 50 )
ForEver
EndProcedure
Procedure Thread2()
Repeat
Debug "request Mutex1-Thread2"
LockMutex( Mutex1 )
Debug "lock Mutex1-Thread2 ok"
SetGadgetText( #string2, FormatDate( "%hh:%ii:%ss", Date() ) )
UnlockMutex( Mutex1 )
Debug "unlock Mutex1-Thread2"
Delay( 50 )
ForEver
EndProcedure
If OpenWindow( 0, 0,0, 300, 100, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered ) And CreateGadgetList( WindowID( 0 ) )
StringGadget( #string1, 10, 10, 100, 20, "" )
StringGadget( #string2, 120, 10, 100, 20, "" )
Thread1 = CreateThread( @Thread1(), 0 )
Thread2 = CreateThread( @Thread1(), 0 )
start = ElapsedMilliseconds() + 2000
Repeat
If start < ElapsedMilliseconds()
Debug "request Mutex1-Main"
LockMutex( Mutex1 )
Debug "lock Mutex1-Main ok"
UnlockMutex( Mutex1 )
Debug "unlock Mutex1-Main"
EndIf
Until WaitWindowEvent( 100 ) = #PB_Event_CloseWindow
KillThread( Thread1 )
KillThread( Thread2 )
CloseWindow( 0 )
EndIf
Vielen Dank,
Hugo