SetTimer不生效,回调函数不执行
主函数
定时执行函数
线程函数
现在有两个疑问
1、为什么SetTimer的回调函数不行
2、SetTimer执行的时候会往线程消息队列里发WM_USER消息吗?如果不是
WM_USER消息是在什么时候往线程队列放的?
谢谢大家。。。比较着急。。。
int main()
{
int iRet = 0;
DWORD dwThreadId;
HANDLE hThread;
DWORD exitCode = 0;
hThread = CreateThread(NULL,0,DoThread,0,0,&dwThreadId);
PRINT("线程已创建成功...");
dwStat = WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
return 0;
}
定时执行函数
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
PRINT("Hello......");
}
线程函数
DWORD CALLBACK DoThread(PVOID pvoid)
{
MSG msg;
UINT timerid;
BOOL bRet;
char sCurDateTime[18] = {0};
PRINT("进入线程处理...");
bRet = PeekMessage(&msg,NULL,WM_USER,WM_USER, PM_NOREMOVE);
timerid=SetTimer(NULL,123,2000,TimerProc);
while( (bRet = GetMessage(&msg,NULL,0,0))!= 0)
{
if(bRet==-1)
{
// handle the error and possibly exit
PRINT("GetMessage Error...");
}
else if (msg.message = WM_USER)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
PRINT("接收到WM_USER消息....");
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
KillTimer(NULL,timerid);
PRINT("线程处理结束...");
return 0;
}
现在有两个疑问
1、为什么SetTimer的回调函数不行
2、SetTimer执行的时候会往线程消息队列里发WM_USER消息吗?如果不是
WM_USER消息是在什么时候往线程队列放的?
谢谢大家。。。比较着急。。。
...全文
相关推荐
向 SetTimer的回调函数传递参数
定时器事件的响应函数,即 VOID CALLBACK TimerProc() 不是由用户程序自己调用的,而是根据时钟事件借由操作系统内核调用的;那么,如何利用这些形式参数,传递程序逻辑处理所需要的参数呢?本文给出一个解决方案,非常好。该解决方案解决了我在实际工程中的切实问题;无需再将需传递的参数声明为丑丑的、破坏封装性的公有变量了。 希望该文可以惠及更多混迹数据码世界的码工们!
怎么往SetTimer的回调函数传递参数
怎么往SetTimer的回调函数传递参数
SetTimer函数
SetTimer函数的用法,很实用看看就知道了。
线程内使用SetTimer实现定时器
线程内使用SetTimer实现定时器 代码中MyThreadTimer时线程定时器的实现
cSharp-settimer.zip_C settimer killtimer_C# settimer
C# SetTimer() KillTimer() 演示 调用系统user32进行计时并输出,时长为1秒。10秒钟后自动停止。


进程/线程/DLL
