gpt4 book ai didi

android - Delphi TTask 安卓服务

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:50 25 4
gpt4 key购买 nike

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

我创建了一个 TTask。

syncTask := ttask.Create(SyncMysqlDatabase);

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

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

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

Cannot start a task that has already completed

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

最佳答案

您需要创建一个 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 服务,我猜你并不太在意“挂起”主线程 - 这个代码 fragment 可以做到这一点

关于android - Delphi TTask 安卓服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com