none
timeSetEvent()函数的启动和Kill问题 RRS feed

  • 问题

  • 关于timeSetEvent(), MSDN上说这个函数将启动一个新线程,去执行CallBack函数.

    我的疑问是,如果我是用TIME_ONE_SHOT, 如果我像下面这样用:

    void CALLBACK TimerProc1( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 ) {
     read bus data;
     if (data == true) then
      timeSetEvent( 5, 1, TimerProc3, 0, TIME_ONESHOT ) ;
    }

    我的疑问是,如果5MS内CallBack执行完, 那么, timeSetEvent( 5, 1, TimerProc3, 0, TIME_ONESHOT ) ;这句是启动新线程,开始新的计数,对吧? 不需要timeKillEvent()去释放这个计数Event, 即TIME_ONE_SHOT这个类型的timeSetEvent是不需要timeKillEvent()的.

    如果没执行完,5MS计数时刻到,那么,timeSetEvent( 5, 1, TimerProc3, 0, TIME_ONESHOT ) ;将启动第二个线程,去执行CallBack,在系统里就有2个线程在执行同一个CallBack,对吧? 所以CallBack应该是可重入的.


    还有个疑问是, timeSetEvent( 5, 1, TimerProc3, 0, TIME_ONESHOT ) ;这个语句执行后,新线程什么时候开始计时,是无法预测的,是吧? 因为新线程什么时候启动,是OS决定的.
    2013年6月26日 1:28

全部回复