【发布时间】:2014-07-22 06:35:20
【问题描述】:
如果没有TOmniEventMonitor,我如何运行任务?如果我在没有它的情况下启动它们,主线程就会冻结。这是没有意义的,因为OmniThreadLibrary 应该基于TThread。 UnObserved 并没有真正解决这个问题,因为它只是制作了同一事物的内部副本。
type
TWorker = class(TOmniWorker)
function Initialize: Boolean; override;
constructor Create;
end;
begin
var
Task: IOmniTaskControl;
begin
Task := CreateTask(TWorker.Create()).Run; // blocks main thread
Task := CreateTask(TWorker.Create()).UnObserved.Run; // will create internal monitor each time
Task := CreateTask(TWorker.Create()).OnTerminated().Run; // will create internal monitor each time
end.
如果我创建一个TThread,它不需要任何类型的“监视器”,也不会阻塞主线程。我没有发送任何类型的消息,为什么需要“监视器”?
【问题讨论】:
-
一些代码在这里会有所帮助...
-
如果我正确理解您的问题,您不需要显示器。如果您不将 CreateTask 的结果保存在返回 IOmniTask 的变量中,您只需要一个监视器...我没有打开 Delphi,所以我从内存中输入。
-
@gabr 解决方案是
List: TList<IOmniTaskControl>同样Array也可以。
标签: delphi delphi-xe6 omnithreadlibrary