use*_*704 5 delphi resume multithreading terminate
我在Delphi中有一个代码,它执行以下操作:
procedure THilo.Execute; // (which is the thread)
begin
inherited;
FreeOnTerminate := True;
while not Terminated do
begin
(...)
Sleep(100);
end;
end;
Run Code Online (Sandbox Code Playgroud)
现在在其他地方,在另一个线程(或GUI)中我们这样做:
var
Hilo2: THilo;
begin
Hilo2 := THilo.Create(True);
Hilo2.start;
Hilo2 := THilo.Create(True);
Hilo2.start;
end;
Run Code Online (Sandbox Code Playgroud)
现在我们已经执行了相同线程的2次,并且它们并行运行.如果我们现在这样做会怎么样?:
Hilo2.Terminate;
Run Code Online (Sandbox Code Playgroud)
这将终止两个线程或只是1,或什么?另外,如果我们想终止它,我们可以通过.Resume()来实现吗?
提前致谢
当你创建第二个线程时,你Hilo2用一个指向第二个对象的指针覆盖局部变量- 第一个对象的指针丢失,你不再对它有任何引用(或控制它的方式).如果线程没有自行终止,这将导致内存泄漏,不,调用terminate将不会停止两个线程,只有最后使用该变量创建的线程作为引用.此外,没有必要调用TThread inherited的Execute方法 - 没有任何东西可以继承(TThread的execute方法是抽象的,它不做任何事情).
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |