zoukankan      html  css  js  c++  java
  • 使用kbmMWScheduler经验两则

    1.使用Scheduler.Shutdown要小心!

    kbmMW 5.10.20的Scheduler增加了Shutdown方法,当你退出应用时,记得用这个方法来处理线程。实际上,这个方法就是等所有Scheduler发出的所有线程执完成,然后清理这些线程,再退出。可能你要问,为什么这样做呢?

    原因是:如果退出应用时,在windows平台上,如果还有线程正在执行,就可以产生异常,并且很难跟踪;在android平台上,在这种情况下,当你重进app时,会卡一会并闪退,再次重进才正常。

    今天遇到了问题,执行Shutdown一直等待,跟踪源代码,发现有一个线程一直在执行,造成Shutdown一直等。这是哪一个线程呢?

    最后查明,原来是自己的调用方式不对造成的,在Scheduler.Run中,执行了Scheduler.Shutdown,而Shutdown一直等这个线程执行完。

    经验:千万不要在Scheduler发起的线程中,调用Shutdown方法!

    2.一定要处理WhenException方法

    当使用Scheduler发出线程任务时,一定记得处理WhenException方法,当线程执行过程中产生异常,保证我们可以用这个方法可记录异常信息。我一般这样用:

              Scheduler.Run(
                procedure
                begin
                   //在线程中执行的代码
                   ...... 
                end).SynchronizedAfterRun(
                procedure(const AScheduledEvent: IkbmMWScheduledEvent)
                begin
                   //线程执完,同步界面的代码
                   ......
                end).WhenException(
                procedure(const AException: Exception)
                begin
                    //线程代码产生的异常,最好输出日志或者弹出出错窗口
                    kbmMWLog.Log.Debug(AException.Message);//输出日志
                end).Activate;

    另外一点要清楚,WhenException也是在线程中执行的。

  • 相关阅读:
    [poj2778]DNA Sequence(AC自动机+矩阵快速幂)
    密码学学习笔记
    [hdu3695]Computer Virus on Planet Pandora(AC自动机)
    [hdu1277]全文检索(AC自动机)
    [hdu3065]病毒侵袭持续中(AC自动机)
    [hdu2896]病毒侵袭(AC自动机)
    lintcode-84-落单的数 III
    lintcode-83-落单的数 II
    lintcode-79-最长公共子串
    lintcode-78-最长公共前缀
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/12665220.html
Copyright © 2011-2022 走看看