Delphi,通过BeginThread传递指针

Tim*_*Tim 1 delphi pointers beginthread

我正在使用BeginThread创建一个线程.

在我用来启动线程的过程中,我想传递一个指向boolean变量的指针,这样分叉线程和主线程都可以作为控制变量访问它,以便在另一个完成时告诉它.

由于开始线程接受了我试图在Addr(MyPointerVar)中传递的参数的指针,但我收到错误.

但我必须这样跑,所以我今晚无法完成我的想法.但如果有人对此有任何想法我很感激.

Rem*_*eau 8

使用'@'地址运算符将变量的地址传递给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);
Run Code Online (Sandbox Code Playgroud)

话虽如此,主线程检查线程是否在不使用单独变量的情况下完成的另一种方法是将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...
Run Code Online (Sandbox Code Playgroud)