首页 > 其他 > 详细

在任务中终止任务遇到的问题

时间:2020-02-27 17:15:12      阅读:60      评论:0      收藏:0      [点我收藏+]
procedure TCustomGridViewCameraDoc.InitSchedule;
begin
  Scheduler.Schedule(
    procedure(const AScheduledEvent:IkbmMWScheduledEvent)
    begin
              ...
              AScheduledEvent.Terminate; //必须 .SyncQueued
    end).EverySecond(1).Synchronized.NamedAs(se_job1)
end;

上面的代码出问题了,当调用AScheduledEvent.Terminate,应用卡死!

换一种写法,测试正常:

procedure TCustomGridViewCameraDoc.InitSchedule;
begin
  se_job1 := Scheduler.Schedule(
    procedure(const AScheduledEvent:IkbmMWScheduledEvent)
    begin
            ... 
            AScheduledEvent.Terminate;//卡死了!
    end).EverySecond(1)
        .SyncQueued//Synchronized换成SyncQueued
        .NamedAs(se_job1)
end;

或者这样写,也正常:

procedure TCustomGridViewCameraDoc.InitSchedule;
begin
  se_job1 := Scheduler.Schedule(
    procedure(const AScheduledEvent:IkbmMWScheduledEvent)
    begin
              TThread.Synchronize(nil,procedure
              begin
                      ....;
              end);//这样同步主线程执行逻辑
            AScheduledEvent.Terminate;
    end).EverySecond(1).NamedAs(se_job1)
end;

 

算不算是bug呢?我也说不清了。

 

在任务中终止任务遇到的问题

原文:https://www.cnblogs.com/kinglandsoft/p/12372855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!