TidThreadComponent 的循环 属性
Loop property of TidThreadComponent
我有一个(希望如此)简单的问题:
TidThreadComponent
的Loop
属性是什么意思?
我的线程程序在 Delphi 7 中编译时运行良好,但在 Delphi Embarcadero 下编译时线程工作不可预测。我怀疑Loop
属性 of TidThreadComponent
(不记得在Delphi 7)。
名称 Loop
表示 Loop=true
应该使他的线程在循环中启动,直到手动终止。但是,还观察到其他情况。
提前感谢任何想法。
根据 TIdThread
的文档,TIdThreadComponent
包含:
Loop is a Boolean property used to indicate if the Run method for the thread instance is called in a loop.
When Loop contains True (the default value assigned in Create), the Run method will be continuously executed until Stopped returns True.
When Loop contains False, the Run method is called once during execution of the thread.
你问Loop=true
是否应该使线程"start in the loop until terminated manually",但更准确的说法是线程的Run()
方法循环直到线程停止,而不是终止。 Indy 中的两个不同概念。线程可以停止而不终止,这允许重新启动线程。例如,当使用 TIdSchedulerOfThreadPool
.
当 TIdThread
停止 时,它将停止调用其 Run()
方法,然后将 Terminate()
或 Suspend()
本身,取决于其 StopMode
属性。默认为 smTerminate
.
TIdThreadComponent
运行一个内部 TIdThread/Ex
,它派生自 TThread
。与 Delphi 线程的大多数用途一样,线程的 Execute()
方法运行一个 while not Terminated
循环。在那个 Terminated
循环中,线程的 Loop
属性 控制线程的 Run()
方法是在每次循环迭代中调用一次,还是在它自己的 while not Stopped
循环中调用每次迭代。换句话说就是这两者的区别:
while not Terminated do
begin
if Stopped then
begin
if Terminated then Break;
Suspend;
if Terminated then Break;
end;
BeforeRun;
Run; // <-- Loop=false
AfterRun;
end;
还有这个:
while not Terminated do
begin
if Stopped then
begin
if Terminated then Break;
Suspend;
if Terminated then Break;
end;
BeforeRun;
while not Stopped do Run; // <-- Loop=true
AfterRun;
end;
所以,基本上可以归结为 Loop
控制在 BeforeRun()
和 AfterRun()
之间调用 Run()
的次数,仅此而已。尽管如此,线程将继续调用 Run()
,直到线程 stopped 或 terminated.
我有一个(希望如此)简单的问题:
TidThreadComponent
的Loop
属性是什么意思?
我的线程程序在 Delphi 7 中编译时运行良好,但在 Delphi Embarcadero 下编译时线程工作不可预测。我怀疑Loop
属性 of TidThreadComponent
(不记得在Delphi 7)。
名称 Loop
表示 Loop=true
应该使他的线程在循环中启动,直到手动终止。但是,还观察到其他情况。
提前感谢任何想法。
根据 TIdThread
的文档,TIdThreadComponent
包含:
Loop is a Boolean property used to indicate if the Run method for the thread instance is called in a loop.
When Loop contains True (the default value assigned in Create), the Run method will be continuously executed until Stopped returns True.
When Loop contains False, the Run method is called once during execution of the thread.
你问Loop=true
是否应该使线程"start in the loop until terminated manually",但更准确的说法是线程的Run()
方法循环直到线程停止,而不是终止。 Indy 中的两个不同概念。线程可以停止而不终止,这允许重新启动线程。例如,当使用 TIdSchedulerOfThreadPool
.
当 TIdThread
停止 时,它将停止调用其 Run()
方法,然后将 Terminate()
或 Suspend()
本身,取决于其 StopMode
属性。默认为 smTerminate
.
TIdThreadComponent
运行一个内部 TIdThread/Ex
,它派生自 TThread
。与 Delphi 线程的大多数用途一样,线程的 Execute()
方法运行一个 while not Terminated
循环。在那个 Terminated
循环中,线程的 Loop
属性 控制线程的 Run()
方法是在每次循环迭代中调用一次,还是在它自己的 while not Stopped
循环中调用每次迭代。换句话说就是这两者的区别:
while not Terminated do
begin
if Stopped then
begin
if Terminated then Break;
Suspend;
if Terminated then Break;
end;
BeforeRun;
Run; // <-- Loop=false
AfterRun;
end;
还有这个:
while not Terminated do
begin
if Stopped then
begin
if Terminated then Break;
Suspend;
if Terminated then Break;
end;
BeforeRun;
while not Stopped do Run; // <-- Loop=true
AfterRun;
end;
所以,基本上可以归结为 Loop
控制在 BeforeRun()
和 AfterRun()
之间调用 Run()
的次数,仅此而已。尽管如此,线程将继续调用 Run()
,直到线程 stopped 或 terminated.