gpt4 book ai didi

multithreading - Delphi访问线程变量

转载 作者:行者123 更新时间:2023-12-03 19:11:47 25 4
gpt4 key购买 nike

我有一个为我执行WMI查询的线程,在执行查询后,我需要访问该线程中的一些变量。

线程创建如下...

procedure TFormMain.RunThread;
var
WMIQ: TThreadWmiQuery;
begin
WMIQ := TThreadWmiQuery.Create(True);
...
WMIQ.OnTerminate := WMIQThreadOnTerminate;
WMIQ.Resume;
end;

在OnTerminate事件中,我得到了所需的值,就像这样……
procedure TFormMain.WMIQThreadOnTerminate(Sender: TObject);
begin
Opcd := TThreadWmiQuery(Sender).P4COpcd;
Role := TThreadWmiQuery(Sender).P4CRole;
Usnm := TThreadWmiQuery(Sender).P4CUsnm;
end;

有人告诉我,这可能不是访问线程变量的最佳方法。还有没有其他更好的方法可以轻松地从线程中获取数据而又不增加太多复杂性?

问候,彼得

最佳答案

谁告诉你的?他们有什么理由吗?

OnTerminate在执行完毕之后且销毁之前可以查询线程实例。实际上,将TThread的FreeOnTerminate设置为True时,您没有其他地方可以访问线程的变量。

其他机制:

线程设置的

  • 全局变量,在其他地方查询:yuck,您仍然需要使用onterminate来知道线程何时完成。最好将变量保持在线程本身的本地。
  • 使用来自线程的PostThreadMessage的
  • :但是要发布到哪里?那意味着让线程知道向谁发布这些消息,从而知道某种观察者机制。

  • 首先我不推荐。如果您只需要在线程终止时查询几个值,第二个恕我直言是多余的。

    关于multithreading - Delphi访问线程变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881794/

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