Delphi TTask Android服务

时间:2016-06-07 16:45:34

标签: android delphi

我不知道如何在Delphi中正确使用TTask。

我创建了一个TTask。

syncTask := ttask.Create(SyncMysqlDatabase);

以下代码位于onlocationchangeevent(位置传感器)中。 每当onlocationchangeevent触发运行此代码时:

if (syncTask.Status <> ttaskstatus.Running) then
  begin
    logi('syncTask.Start');
    syncTask.Start;
  end;

但是当我再次尝试重新启动(完成后)任务后,我得到以下异常:

  

无法启动已完成的任务

是的,有人可以帮帮我吗?为什么呢?

2 个答案:

答案 0 :(得分:2)

您需要创建一个ITask变量并将其分配给它。

然后,您可以等待任务完成,然后再次实例化

像这样:

private
  aTask: TTask;

...

Procedure LocationChanged;
begin
  if Assigned(aTask) then
  begin  
    while not TTask.WaitForAll([aTask], 10000) do
      break;
  end;

  aTask := TTask.Run(procedure()
                     begin
                       // Do Your Stuff
                     end);
end;

我不确定我的Assigned(aTask)代码是否可行,但基本上只是检查aTask是否分配了任务

因为看起来你正在做一个Android服务,所以我猜测你并没有太多挂机&#34;挂着&#34;主线程 - 这段代码片段会这样做

答案 1 :(得分:1)

错误不言自明:

  

无法启动已完成的任务

TTask只能启动一次。完成后,您必须将其释放并创建一个新的TTask