在下最近在做一个有关电机的编程,需要执行完一段程序后延时若干秒等电机转到一定位置后在执行另一行程序,由于要用多很多很多次延时,而且每次延时完后执行的代码还不一样,所以SETTIMER好像不太好用,本来想用SLEEP的,但最近客户又提了一个要求,要在程序运行的过程中设1个40MS的定时器,每40MS查询一下电机其他地方的状态,这样用SLEEP的话就会使程序停止接受消息,那40MS的定时器就没法用了啊...所以小弟向各位高人求助一下啊,怎样设置一个单纯的延时函数,不干涉到这个40MS的定时器?不胜感激!!还有用多线程可不可以解决这个问题,如果可以的话,麻烦把大概思路告知在下

解决方案 »

  1.   

    The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started. It is limited to the resolution of the system timer. If you need a higher resolution timer, use amultimedia timer or a high-resolution timer.
      

  2.   

    用查询系统定时器的计数值的方法,用到的API函数是QueryPerformanceCounter、QueryPerformanceFrequency,方法是用当前计数值减去开始计时时刻的计数值,得到计数差值,再除以系统定时器的频率就是计的时间http://www.vckbase.com/document/viewdoc/?id=1234
      

  3.   

    多谢各位,但是在一个线程中用SLEEP函数,另一个线程会不会也被挂起呢?我明显感觉到在SLEEP函数执行的时候,SetTimer也不运行了,别人告诉我说用SetTimer本身就是新建了一个线程,但这个线程似乎也被挂起了,还有2L 3L的兄弟说的不太明白啊....
    其实就是这样一个程序
    VOID MyFunc();
    {
       SetTimer(1,40,NULL);
       *&*^^(&^*&^//电机运动到位置1的代码
                  //延时若干秒
       #$%@%@%@#%// 点击运动到位置2的代码
                     //延时若干秒
        &)×&×//电机运动到位置3的代码
                     //延时若干秒}
    void CMyDialog::OnTimer(UINT nIDEvent) 
    {
       //  检测电机状态的函数
    }现在就是困惑延时的函数怎么写,我用Sleep的方法试了下,感觉OnTimer函数在Sleep的时候就不转了
      

  4.   

    可以另外创建一个线程,或者用SetWaitableTimer加SleepEx。