用Sleep会把整个线程挂起。鼠标都动不了。
有什么API是可以等待,又会返回控制权的?别外TimerProc的第四个参数dwTime是干吗用的?
(TimerProc是SetTime的第二个参数)
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)

解决方案 »

  1.   

    可以写个Timer来查询状态,也可以定义一个消息来处理某事件的结束(在该事件结束前发一消息)
      

  2.   

    MSG msg;
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    DispatchMessage(&msg); 

    如果时间到了就结束上面的循环
      

  3.   

    我的目地
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    Sleep(500);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    要在中间加一个不会挂起的暂停.
      

  4.   

    MSG msg;
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    (&msg); 
    判断,如果过时间了就
    break;

      

  5.   

    怎么判断,不会是加个Sleep吧??那还不是一样.
     如果是用while和timeGettime不断获得当前时间来做对比.好像可以,
    但这样会不会太占用系统资源了!!!!
    我现在是用SetTimer。但好像太不科学了.
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    SetTimer(hWindow,1999,100,TimerOut);
    void CALLBACK TimerOut(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
    {  static int i=0;
      i++;
      if(i>2){mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
        KillTimer(hWindow,1999);}
    }
    我在网上找到了这个WaitForSingleObject()不知可不可以用来等待消息呢?
    我谁用过的,介绍下呀.
      

  6.   

    不要在你的主线程中等待,可以另开一个线程,在这个线程每过500毫秒发送一个消息给主线程。
    也可以参看
    http://expert.csdn.net/Expert/topic/2274/2274342.xml?temp=.9774134
      

  7.   

    那有没有重新运行的方法呢?
    比如说:我先用AfxBeginThread创建ThreadMouseEvent这个线程,第五个参数为CREATE_SUSPENDED挂起它。然后要用时用什么才可以重新让它运行一次??
    注:ResumeThread这个好像不行,这个是让它继续运行的.
    UINT ThreadMouseEvent(LPVOID)
    {
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    Sleep(100);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    Sleep(500);
             //这里怎么挂起它自已呢??
    return 0;
    }
      

  8.   

    //这里怎么挂起它自已呢??
    DWORD WaitForSingleObject(
      HANDLE hHandle,        // handle to object
      DWORD dwMilliseconds   // time-out interval
    );
    hHandle  可以是一个互斥量,先在主线程中建立一个互斥量(mutex),等需要启用子线程的时候释放这个互斥量,这个子线程就会自动唤醒。
    dwMilliseconds 是超时时间,可以设定为INFINITE,无限等待。