小编Lar*_*qua的帖子

使用IOmniTaskControl / TOmniWorker时等待调用完成

我已经使用TOmniWorker创建了IOmniTaskControl,以便可以在特定线程中定期运行代码块。因此,我将根据需要在此IOmniTaskControl上调用Invoke。当我这样做时,有时需要等待与该工作相关的执行完成。

我尝试在调用之后在IOmniTaskControl上调用WaitFor(INFINITE),但是它挂起了。我进行了调试,可以看到Invoke调用上的方法已完成。与TOmniWorker一起使用时,我是否误将WaitFor与IOmniTaskControl一起使用?

编辑:我在测试文件夹中编辑了test_43_InvokeAnonymous项目,并且看到了相同的行为:

procedure TfrmInvokeAnonymousDemo.btnInvokeClick(Sender: TObject);
var
  formThreadID: DWORD;
  task        : IOmniTaskControl;
begin
  formThreadID := GetCurrentThreadID;
  if Sender = btnInvoke then
    task := FTask
  else
    task := FMonitoredTask;

  task.Invoke(
    procedure (const task: IOmniTask)
    var
      taskThreadID: DWORD;
    begin
      // this will execute in the context of the worker thread
      taskThreadID := GetCurrentThreadID;
      Sleep(2000);
//      task.Invoke(
//        procedure
//        begin
//          // this will execute in the context of the main thread
//          frmInvokeAnonymousDemo.lbLog.Items.Add(Format(
//            'Current thread ID: %d, task thread ID: …
Run Code Online (Sandbox Code Playgroud)

delphi omnithreadlibrary delphi-xe5

3
推荐指数
1
解决办法
357
查看次数

标签 统计

delphi ×1

delphi-xe5 ×1

omnithreadlibrary ×1