我正在使用BeginThread创建一个线程。
在我用来启动线程的过程中,我想传递一个指向boolean变量的指针,这样分叉线程和主线程都可以作为控制变量访问它,以便在另一个完成时告诉一个。
因为开始线程接受了我试图在Addr(MyPointerVar)中传递的参数的指针,但是我收到错误。
但是我必须这样跑,所以我今晚无法完成我的想法。但如果有人对此有任何想法,我很感激。
答案 0 :(得分: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);
话虽如此,主线程检查线程是否在不使用单独变量的情况下完成的另一种方法是将BeginThread()返回的线程句柄传递给WaitForSingleObject()并查看它是否返回WAIT_OBJECT_0:< / p>
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...
答案 1 :(得分:0)
雷米上面的答案是正确的解决方案。
我正在做Remy上面提到的并且仍然遇到问题,并且我刚刚做了一个快速测试似乎我的错是处理在一个不同的对象中使用线程程序而不是在调用beginthread的地方。