首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi,通过BeginThread传递指针

Delphi,通过BeginThread传递指针
EN

Stack Overflow用户
提问于 2010-11-05 04:32:02
回答 2查看 3.2K关注 0票数 1

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

在我用来启动线程的过程中,我希望传递一个指向布尔变量的指针,以便forked线程和主线程都可以作为控制变量访问它,以告知另一个线程何时完成。

由于begin thread接受了一个指向我试图在Addr(MyPointerVar)中传递的参数的指针,但是我得到了错误。

但是我得走了,所以我今晚不能在这里结束我的想法。但如果有人对此有任何想法,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-05 04:43:28

使用'@‘地址运算符将变量的地址传递给BeginThread(),例如:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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...
票数 8
EN

Stack Overflow用户

发布于 2010-11-08 23:05:03

上面Remy的答案是正确的解决方案。

我按照Remy上面的建议做了,但仍然有问题,我只是做了一个快速的测试,似乎我的错误是在一个不同的对象中处理线程过程,而不是在beginthread被调用的对象中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4101088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档