Используйте оператор адреса '@', чтобы передать адрес переменной в BeginThread (), например:
var
ThreadDone: Boolean;
ThreadId: LongWord;
ThreadHandle: Integer;
function ThreadFunc(PThreadDone: PBoolean): Integer;
begin
...
PThreadDone^ := True;
Result := 0;
end;
...
ThreadHandle := BeginThread(nil, 0, @ThreadFunc, @ThreadDone, 0, ThreadId);
С учетом вышесказанного, еще один способ для основного потока проверить, выполняется ли поток без использованияотдельная переменная должна передать дескриптор потока, возвращенный BeginThread (), в WaitForSingleObject () и посмотреть, возвращает ли он WAIT_OBJECT_0 или нет:
var
ThreadId: LongWord;
ThreadHandle: Integer;
function ThreadFunc(Parameter: Pointer): Integer;
begin
...
Result := 0;
end;
...
ThreadHandle := BeginThread(nil, 0, @ThreadFunc, nil, 0, ThreadId);
...
if WaitForSingleObject(THandle(ThreadHandle), 0) = WAIT_OBJECT_0 then
finished...
else
still running...