用Sleep会把整个线程挂起。鼠标都动不了。
有什么API是可以等待,又会返回控制权的?别外TimerProc的第四个参数dwTime是干吗用的?
(TimerProc是SetTime的第二个参数)
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
有什么API是可以等待,又会返回控制权的?别外TimerProc的第四个参数dwTime是干吗用的?
(TimerProc是SetTime的第二个参数)
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
DispatchMessage(&msg);
}
如果时间到了就结束上面的循环
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(500);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
要在中间加一个不会挂起的暂停.
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
(&msg);
判断,如果过时间了就
break;
}
如果是用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()不知可不可以用来等待消息呢?
我谁用过的,介绍下呀.
也可以参看
http://expert.csdn.net/Expert/topic/2274/2274342.xml?temp=.9774134
比如说:我先用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;
}
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval
);
hHandle 可以是一个互斥量,先在主线程中建立一个互斥量(mutex),等需要启用子线程的时候释放这个互斥量,这个子线程就会自动唤醒。
dwMilliseconds 是超时时间,可以设定为INFINITE,无限等待。