红鱼儿

公告

统计

  • 随笔 - 121
  • 文章 - 1
  • 评论 - 24
  • 引用 - 0
kbmMW 5.09测试报告(1)-Scheduler

这个版本除了增加新的SmartBinding功能,同时提供了大量的功能更新以及bug修正。其中,SmartBinding的介绍,xalion已经第一时间写了初识kbmmw 中的smartbind功能,同时还写了XML-RPC和 JSON-RPC的支持文章。kbmMW的福音,向xalion敬礼!关于SmartBinding,在这个版本没发布前,就第一时间翻译了作者的博文:SmartBinding与kbmMW#1,我想这些资料可以让大家轻松的使用这个让人兴奋的功能了!

因为常用Scheduler,所以先看看这个版本为Scheduler做了哪些改变?

1.为IkbmMWScheduledEvent接口添加了方法SyncQueued:IkbmMWScheduledEvent,功能类似于Synchronized,用来把线程任务(作业)在主线程中同步运行,不同的是SyncQueued以非阻塞方式将操作放进队列,以防止某些死锁产生。

2.增加方法:

IkbmMWScheduledEvent.AfterEnd

IkbmMWScheduledEvent.SynchronizedAfterEnd

这是可选的方法,如果实现了该方法,一但方法被执行过,那么将永远不会被再次执行。

3.增加IkbmMWScheduledEvent.Executed:boolean属性,如果事件至少执行过一次,则返回true。

4.为IkbmMWScheduledEvent接口添加了属性OnAnonymousAfterEndProcedure:TkbmMWOnAnonymousScheduledProcedure和OnSimpleAnonymousAfterEndProcedure:TkbmMWOnSimpleAnonymousScheduledProcedure,具体同AfterEnd的功能一样。

5.为IkbmMWScheduledEvent接口添加了属性IsSynchronized,指示事件是否正在SynchronizedSyncQueued中执行

6.为TkbmMWScheduler.Unschedule和Clear等方法添加了可选的const AWait:boolean = true参数。

7.修正了kbmMW Scheduler中的多个bug及一些内存泄漏问题。

以上内容,基本翻译的这个版本更新说明中关于Scheduler的内容。下面,准备用代码来试试这些功能的应用情况,及会带给我们什么益处。

1.对于新增加SyncQueued方法,本质上,就是通过TThread.Queue与TThread.Synchronize来调用线程作业代码的区别。所以,这里理解TThread.Queue与TThread.Synchronize的区别就完全懂了。

procedure TForm6.Button1Click(Sender: TObject);
begin
   Scheduler.Run(procedure
                 var
                    I: Integer;
                 begin
                      for I := 1 to 10000 do
                      begin
                           text1.Text:=i.ToString;
                      end;
                 end)
            .SyncQueued//.Synchronized
            .Activate;
end;

上面代码,其中的匿名函数,就是通过TThread.Queue来执行的。如果将.SyncQueued换成.Synchronized,则通过TThread.Synchronize来执行。

 作者为什么加了这个SyncQueued支持呢?原来,在这一版本中,作者在实现SmartBind时用到,具体在单元kbmMWSmartBind的TkbmMWBindings.Update方法中,可以参考学习更进一步的用法。

 

posted on 2019-05-15 23:31 红鱼儿 阅读(...) 评论(...) 编辑 收藏