我有一个为我执行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时,您没有其他地方可以访问线程的变量。
其他机制:
线程设置的
首先我不推荐。如果您只需要在线程终止时查询几个值,第二个恕我直言是多余的。
关于multithreading - Delphi访问线程变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881794/