I also call CreateThread and save result to Global ThreadIdPB.
It seems that:
1. ThreadID(ThreadIdPB) <> ThreadIdOS
2. PostThreadMessage_(ThreadID(ThreadIdPB),#WM_USER,0,0) Fails
3. PostThreadMessage_(ThreadIdOS,#WM_USER,0,0) works
4. When using method 3, Debug shows:
TestThread entered
TestThread got Msg = 1024
TestThread got Msg = 1024
TestThread got Msg = 1024
I'm using version PureBasic 5.42 LTS (Windows - x86)
Here's the code just in case I'm doing something wrong:
Code: Select all
Global ThreadIdOS
Global ThreadIdPB
Declare TestThread(*ThreadIdOS)
Code: Select all
ThreadIdPB = CreateThread(@TestThread(),@ThreadIdOS)
SetTimer_(WindowID(Window_0),1,2000,0)
Code: Select all
Select Message
Case #WM_TIMER
If ThreadID(ThreadIdPB) = ThreadIdOS
PostThreadMessage_(ThreadID(ThreadIdPB),#WM_USER,0,0)
ElseIf IsThread(ThreadIdPB)
PostThreadMessage_(ThreadIdOS,#WM_USER,0,0)
EndIf
ProcedureReturn 0
Code: Select all
;---------------------------
Procedure TestThread(*lpThreadId)
Debug "TestThread entered"
PokeL(*ThreadIdOS,GetCurrentThreadId_())
Repeat
Protected Msg.MSG
If PeekMessage_(@Msg,0,#WM_USER,#WM_USER+16,#PM_NOREMOVE)
If GetMessage_(@Msg,0,#WM_USER,#WM_USER+16)
Debug "TestThread got Msg = " + Msg\message
EndIf
Else
Sleep_(0)
EndIf
ForEver
Debug "TestThread exited"
EndProcedure
Code tags added
17.01.2017
RSBasic