gpt4 book ai didi

Delphi,通过 BeginThread 传递指针

转载 作者:行者123 更新时间:2023-12-02 13:05:36 25 4
gpt4 key购买 nike

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

在我用来启动线程的过程中,我想传递一个指向 bool 变量的指针,以便 fork 线程和主线程都可以将其作为控制变量访问,以告诉一个线程何时完成。

由于开始线程接受参数指针,我尝试传入 Addr(MyPointerVar) 但出现错误。

但我必须运行,所以今晚我无法在这里完成我的想法。但如果有人对此有任何想法,我很感激。

最佳答案

使用'@'地址运算符将变量的地址传递给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...

关于Delphi,通过 BeginThread 传递指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com