gpt4 book ai didi

multithreading - 在 delphi 2007 中启动挂起线程的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 14:42:31 24 4
gpt4 key购买 nike

在delphi XE中我可以使用启动程序,但在delphi 2007中不存在此方法。

此示例代码在 delphi xe 中使用 Start 可以正常工作

MyThread:=TMyThread.Create(True);
MyThread.FreeOnTerminate :=True;
MyThread.Property1:=900;
MyThread.Property2:=2;
MyThread.Start;

但是在delphi 2007中,start过程不存在,所以我使用了resume过程,该过程在delphi的新版本中已被弃用。

MyThread:=TMyThread.Create(True);
MyThread.FreeOnTerminate :=True;
MyThread.Property1:=900;
MyThread.Property2:=2;
MyThread.Resume;

可以在delphi 2007中使用resume吗?还是我必须使用其他方法来启动挂起的线程?

最佳答案

启动挂起线程的正确方法是从一开始就不存在挂起线程。

有一种更好的方法来创建线程。如果调用者必须向对象提供一个值才能使类正常工作,那么不要将其设置为可选:需要将其作为构造函数的参数。如果该参数只有一个有效值,那么甚至不要将其作为参数:只需在构造函数中对其进行硬编码即可。 (您有多少次编写了一个线程类,只有有时在终止时才应该释放自己?我从未见过这种情况。)

constructor TMyThread.Create(Prop1, Prop2: Integer);
begin
inherited Create(False);
FreeOnTerminate := True;
Property1 := Prop1;
Property2 := Prop2;
end;

然后您可以使用 Ron Popeil 方法创建线程:只需设置它并忘记它!

MyThread := TMyThread.Create(900, 2);

创建线程后,调用者不必对线程执行任何操作。而且由于它是一个终止时释放的线程,因此调用者甚至可能根本不应该保留对 MyThread 变量的引用,因为一旦线程完成运行,该引用就会变得无效。

(担心 inherited Create(False) 行创建一个线程,该线程将在构造函数的其余部分完成运行之前开始运行?别担心!这已在 Delphi 6 中修复,结束十年前。构造函数完成后,线程将自动启动;请参阅 TThread.AfterConstruction 了解如何实现。)

关于multithreading - 在 delphi 2007 中启动挂起线程的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206377/

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