要在DLL中定时处理事件, 如何实现?求各位大虾指点一二,如有简单的Demo更是万分感谢,马上给分!!!

解决方案 »

  1.   

    创建一个非模式的隐藏的对话框窗口在里面处理Timer试试
      

  2.   

    // DLL中的线程函数可以象这样使用Timer
    UINT ThreadProc(LPVOID)
    { SetTimer(NULL, 1, 5000, NULL);
    MSG msg;
    // PeekMessage 强制系统为该线程建立消息栈
    PeekMessage(&msg, NULL, NULL, NULL, FALSE);
    while (GetMessage(&msg, NULL, NULL, NULL))
    {
    switch (msg.message)
    {
    case WM_TIMER:
    {
    // 这里每5秒钟执行一次
    }
    break;
    }
            //TranslateMessage(&msg); 
    //DispatchMessage(&msg);
    }
    KillTimer(NULL, 1);
    return 0;
    }
      

  3.   

    SetTimer(NULL, 0, 1000, (TIMERPROC)Timer2Proc);VOID CALLBACK Timer2Proc(
                            HWND hWnd, // handle of window for timer messages
                            UINT uMsg,    // WM_TIMER message
                            UINT idEvent, // timer identifier
                            DWORD dwTime  // current system time
                            )
    {
      return;
    }
      

  4.   

    创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了
    UINT TimerThread(LPVOID pama)
    {
         UINT oldTickCount, newTickCount;
         oldTickCount = GetTickCount();
         while(TRUE)
         { 
              while(TRUE)
               {
                   newTickCount = GetTickCount();
                   if(newTickCount - oldTickCount >= 100)
                   {
                      oldTickCount = newTickCount;
                      break;
                   }
               }
              TimeProc();
         }
        return 0;   
    }
    大约每100ms 调用一次TimeProc();
      

  5.   

    ymbymb提出的方法可能有问题:开销太大了,不理想
    我想最好的方法还是Semigod的,利用线程的消息泵
      

  6.   

    Semigod前辈可否说的详细一点,将具体的用法贴出来大家学习一下.