多线程的东西真TMD头痛。

解决方案 »

  1.   

    线程中就不必用定时器了。做个循环判断时间是否到达定时值,然后执行相关操作。定时器是附着在窗体上的。参见:UINT_PTR SetTimer(          HWND hWnd,
        UINT_PTR nIDEvent,
        UINT uElapse,
        TIMERPROC lpTimerFunc
    );
      

  2.   

    用timeSetEvent吧,不需要窗口句柄的,但是timeSetEvent的个数有限制,超过16个就不行了,你可以只建一个timeSetEvent,把timeSetEvent的时间间隔设得很小,然后在线程里进行时间累加,到了时间值就认为计时时间到。这样做系统资源的消耗会小一些
      

  3.   

    SetTimer的最后一个参数是个回调函数,定一一个这样的函数,调用SetTimer时将hWnd设为NULL就可以了
      

  4.   

    线程里的函数是要不断循环的,例如下面的代码,那么SetTimer加在哪里合适?是不是还不如在doloop循环里加上sleep()?DWORD CThreadDerived::ThreadHandler()
    {
    BOOL bCanContinue = TRUE;
    int nIncomingCommand; do
    {
    WaitForNotification(nIncomingCommand); switch (nIncomingCommand)
    {
    case CThread::CMD_INITIALIZE:
    HandleCommandImmediately(CThread::CMD_RUN);
    break; case CThread::CMD_RUN:
    Lock();
    TRACE("Thread 1\n");
    ::Sleep(1000);
    Unlock();
    break; case CThread::CMD_PAUSE:
    SetActivityStatus(CThread::THREAD_PAUSED);
    break; case CThread::CMD_STOP:
    bCanContinue = FALSE;
    break; default:
    break;
    }; } while (bCanContinue); return 0; // ... if Thread task completition OK
    }
      

  5.   

    如果定时器的作用只是延时,用sleep算了,简单明了