在程序中设定Timer函数2秒执行一次,但是在Timer中调用另外一个函数A,这个函数A执行的时间可能比较长,这样就造成了有可能函数A还没执行完就被Timer函数中断,有没有可能让函数A完全执行完毕了(不被Timer中断)?

解决方案 »

  1.   

    函数A里面有创建线程的话可能发生你说的情况
    否则不可能出现A还没执行完就被Timer中断,都是按顺序执行的
      

  2.   

    正确的方法是在A函数里面添加互斥量,进入函数判断互斥,函数执行完释放互斥量。在实时性要求不高的情况下,简单的做法是添加个静态变量。void A()
    {
        static bool bRuning = false;
        if (bRuning)
        {
            return;
        }   
        else
            bRuning = true;    // 干活    bRuning = fasle;
    }
      

  3.   


    你只能设置Timer是执行一次,当你在Timer中调用A完成后,再设置一个只运行一次的Timer
      

  4.   

    在程序中设定Timer函数2秒执行一次,但是在Timer中调用另外一个函数A,这个函数A执行的时间可能比较长,这样就造成了有可能函数A还没执行完就不可能被Timer函数中断,因为Timer不是实时中断,它是要经过消息队列的,当你的函数A执行时间超过Timer时间时,Timer事件会积累成一个.
      

  5.   

    只是在Timer中调用另外一个函数A, 所以是顺序执行的.如果函数没有返回.那么是不会对下一个Timer 消息作响应的.如果开线程,响应下一个Timer时不撤原先线程,线程一样可以执行完毕
      

  6.   

    这样就造成了有可能函数A还没执行完就被Timer函数中断,有没有可能让函数A完全执行完毕了(不被Timer中断)?
    =================
    实际情况是A肯定会被执行完,Timer如果处理的速度比定时器消息的速度慢的话,后来的消息会并合并。不要忘记了,Timer并不是多线程执行的,它还是单线程的。
      

  7.   


    //在进入timer的时候,KillTimer();
    //等函数执行完了,在SetTimer();
    //如果要稍微都接近2秒一次的话,KillTimer后,记录时间,函数执行完后,也记录时间,算出函数的执行时间,在算出SetTimer的interval。
      

  8.   

    waitforsingleobject()
    可以实现等待线程处理完后,
    再继续向下执行的功能。
    如楼上所说的,置一个标志位,也不错。
      

  9.   

    被中断?
    应该不会被中断才对
    你的这个timer片段如果不返回的话
    不会触发下一个a的事件
      

  10.   

    。。学习了,以前在timer中用messagebox就有重入的问题,所以以为会同时执行,看了下面的才明白
    http://www.programmer-club.com.tw/ShowSameTitleN/vc/37102.html