我正在使用BeginThread创建一个线程。
在我用来启动线程的过程中,我希望传递一个指向布尔变量的指针,以便forked线程和主线程都可以作为控制变量访问它,以告知另一个线程何时完成。
由于begin thread接受了一个指向我试图在Addr(MyPointerVar)中传递的参数的指针,但是我得到了错误。
但是我得走了,所以我今晚不能在这里结束我的想法。但如果有人对此有任何想法,我将不胜感激。
发布于 2010-11-05 04:43:28
使用'@‘地址运算符将变量的地址传递给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...发布于 2010-11-08 23:05:03
上面Remy的答案是正确的解决方案。
我按照Remy上面的建议做了,但仍然有问题,我只是做了一个快速的测试,似乎我的错误是在一个不同的对象中处理线程过程,而不是在beginthread被调用的对象中。
https://stackoverflow.com/questions/4101088
复制相似问题