void ChildHandle()
{
return;
DWORD dwChildThreadId;
printf("use timer in workthread of console application<masterz>\n");
/* 创建子线程 */
HANDLE hChildThread = CreateThread(
NULL, /* 不需要进行安全设置 */
0, /* 使用默认的堆栈大小 */
ThreadProc, /* 线程回调函数 */
0, /* 传递给线程函数的参数 */
0, /* 使用默认的创建标志 */
&dwChildThreadId);
/*
* 进行实际的等待操作
* *
*/
DWORD dwwait = WaitForSingleObject(hChildThread,1000*3600*24);
/* 处理实际的等待结果*/
switch(dwwait)
{
case WAIT_ABANDONED: /* 线程被抛弃 */
printf("main thread WaitForSingleObject return WAIT_ABANDONED\n");
break;
/* The state of the specified object is signaled.*/
case WAIT_OBJECT_0: /* 指定对象的状态是 */
printf("main thread WaitForSingleObject return WAIT_OBJECT_0\n");
break;
case WAIT_TIMEOUT: /* 超时了*/
printf("main thread WaitForSingleObject return WAIT_TIMEOUT\n");
break;
}
/* 关闭子线程*/
CloseHandle(hChildThread);
_getch();
}
unsigned long WINAPI ThreadProc(PVOID pvoid)
{
MSG msg;
BOOL bRet;
int count =0;
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
/* 设置定时器 */
UINT timerid = SetTimer(NULL,111,600,NULL);
/* 取回消息*/
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else if(msg.message==WM_TIMER)
{
count++;
printf("WM_TIMER in Child thread count=%d\n",count);
// if(count>4)
// break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
/* 关闭定时器*/
KillTimer(NULL,timerid);
printf("thread end here\n");
return 0;
}
注意父线程子线程定时间隔不一样,但结束时间要求一样的。请高手指点。
7 个解决方案
#1
你要什么样的结果
#2
UINT timerid = SetTimer(NULL,111,600,NULL);
~~~~~~~~
这样在线程中得不到WM_TIMER消息的
必须指定一个窗口,WM_TIMER会发给该窗口
~~~~~~~~
这样在线程中得不到WM_TIMER消息的
必须指定一个窗口,WM_TIMER会发给该窗口
#3
我说的还不清楚嘛?这样说吧。一个父线程,有个定时操作,一个子线程,它也有个定时操作。没有窗口,我该怎么做?
#4
你的代码我编译运行了没什么不妥啊
#5
函数ChildHandle一开始就 return; ?
#6
haha,sorry,这个return得取消。
#7
关注
#1
你要什么样的结果
#2
UINT timerid = SetTimer(NULL,111,600,NULL);
~~~~~~~~
这样在线程中得不到WM_TIMER消息的
必须指定一个窗口,WM_TIMER会发给该窗口
~~~~~~~~
这样在线程中得不到WM_TIMER消息的
必须指定一个窗口,WM_TIMER会发给该窗口
#3
我说的还不清楚嘛?这样说吧。一个父线程,有个定时操作,一个子线程,它也有个定时操作。没有窗口,我该怎么做?
#4
你的代码我编译运行了没什么不妥啊
#5
函数ChildHandle一开始就 return; ?
#6
haha,sorry,这个return得取消。
#7
关注