- Сообщения
- 7,790
- Репутация
- 2,322
В справке PureBasic написано, что процедура, которую вы используете в качестве потока, должна принимать один параметр и не может ничего возвращать.
Почему? Вот два простых примера (разница только в проверке существования потока):
ИМХО, авторы справки не могли не знать об этом.
И почему в справке не указано, что надо закрывать handle, возвращаемый функцией ThreadID()?
PS
Первым способом можно проверять работу потока и получать результат (ProcedureReturn) в AutoIt из DLL на PureBasic.
Почему? Вот два простых примера (разница только в проверке существования потока):
Код:
#STILL_ACTIVE = 259
Procedure _TestProcedure(*Value)
Delay(Random(4000, 2000))
ProcedureReturn *Value
EndProcedure
iExitCode.l
*pExitCode = @iExitCode
iThread = CreateThread(@_TestProcedure(), 123)
Debug "iThread: " + iThread
hThread.i = ThreadID(iThread)
Debug "hThread: " + hThread
Repeat
Delay(500)
Debug "GetExitCodeThread_: " + GetExitCodeThread_(hThread, *pExitCode)
Debug "ExitCode: " + iExitCode
Until iExitCode <> #STILL_ACTIVE
Debug "---"
Debug "CloseHandle_: " + CloseHandle_(hThread)
Код:
Procedure _TestProcedure(*Value)
Delay(Random(4000, 2000))
ProcedureReturn *Value
EndProcedure
iExitCode.l
*pExitCode = @iExitCode
iThread = CreateThread(@_TestProcedure(), 123)
Debug "iThread: " + iThread
hThread.i = ThreadID(iThread)
Debug "hThread: " + hThread
Repeat
Delay(500)
Debug "Working..."
Until IsThread(iThread) = 0
Debug "---"
Debug "GetExitCodeThread_: " + GetExitCodeThread_(hThread, *pExitCode)
Debug "ExitCode: " + iExitCode
Debug "CloseHandle_: " + CloseHandle_(hThread)
И почему в справке не указано, что надо закрывать handle, возвращаемый функцией ThreadID()?
PS
Первым способом можно проверять работу потока и получать результат (ProcedureReturn) в AutoIt из DLL на PureBasic.