hi folks,
how to find out when a thread has finished??
possible solution could look like:
Code: Select all
#Title = "Thread-Test"
Procedure Thread()
;do stuff...
MessageRequester(#Title, "a hello from our Thread")
;end thread...
SendMessage_(WindowID(0), #WM_USER+1, 0, 0)
EndProcedure
If OpenWindow(0, 0, 0, 480, 320, #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_ScreenCentered, #Title)
If CreateThread(@Thread(), 0)
Repeat
WinEvent.l = WaitWindowEvent()
Select WinEvent
Case #WM_USER+1 ;<--- but won't work
ThreadEnd = #True
Break
Case #PB_Event_CloseWindow
WindowEnd = #True
Break
EndSelect
ForEver
If WindowEnd = #False And ThreadEnd = #True
MessageRequester(#Title, "App was closed AFTER the Thread has finished")
Else
MessageRequester(#Title, "App was closed BEFORE the Thread could finished")
EndIf
EndIf
EndIf
End
so how to leave the WaitWindowEvent() loop, if you can't / don't want to use WindowEvent() instead ??
i did this by a trick for now:
Code: Select all
#Title = "Thread-Test"
Global ThreadEnd.l
Procedure Thread()
;do stuff...
MessageRequester(#Title, "a hello from our Thread")
;end thread...
ThreadEnd = #True
ResizeWindow(WindowWidth() + 1, WindowHeight() + 1)
EndProcedure
If OpenWindow(0, 0, 0, 480, 320, #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_ScreenCentered, #Title)
If CreateThread(@Thread(), 0)
Repeat
WinEvent.l = WaitWindowEvent()
If WinEvent = #PB_Event_SizeWindow
If ThreadEnd = #True
Break
EndIf
ElseIf WinEvent = #PB_Event_CloseWindow
WindowEnd = #True
Break
EndIf
ForEver
If WindowEnd = #False And ThreadEnd = #True
MessageRequester(#Title, "App was closed AFTER the Thread has finished")
Else
MessageRequester(#Title, "App was closed BEFORE the Thread could finished")
EndIf
EndIf
EndIf
End
and btw a IsThread() would be very very very... usefull

//EDIT:
hmm... or how about a own simple but very usefull and cross platform compatible, pb intern message system??
something like:
Code: Select all
SendPBMessage(99) ;send a value of 99
WinEvent.l = WaitWindowEvent()
Select WinEvent
Case #PB_Event_Message
If GetPBMessage() = 99 ;return the value of 99
MessageRequester("PB-Message", "dance in the rain!")
Else
MessageRequester("PB-Message", "drink beer!")
EndIf
EndSelect

c ya,
nco2k