【问题标题】:Delphi TTask Android serviceDelphi TTask Android 服务
【发布时间】:2016-06-07 16:45:34
【问题描述】:

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

我创建了一个 TTask。

syncTask := ttask.Create(SyncMysqlDatabase);

以下代码在 onlocationchangeevent(位置传感器)中。 每次触发 onlocationchangeevent 时运行这段代码:

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

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

无法启动已完成的任务

有人可以帮帮我吗?为什么?

【问题讨论】:

    标签: android delphi


    【解决方案1】:

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

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

    像这样:

    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 服务我猜你并没有太挂在“挂起”主线程上 - 这个代码 sn-p 会做到这一点

    【讨论】:

      【解决方案2】:

      错误是不言自明的:

      无法开始已完成的任务

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 2016-03-12
        • 2013-12-26
        • 2016-05-10
        相关资源
        最近更新 更多