代码如下
void CTimerDlg::OnButton1() 
{
Serial=10;
::CreateThread(NULL,0,SendProc,&Serial,0,NULL);

}
DWORD WINAPI SendProc(LPVOID lpParameter)
{
int i=*((int *)lpParameter);
::SetTimer(NULL,i,1000,(void(CALLBACK*)(HWND,UINT,UINT,DWORD))TimerProc);
return 0; 
}VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)

CString str("haha");
AfxMessageBox(str);
}
点击按钮创建线程后,进入SendProc,但是TimerProc不起作用,调试时也没有进入函数体内,SendProc与TimerProc都是全局函数,望各位大侠帮忙!

解决方案 »

  1.   

    ::SetTimer(NULL,i,1000,(void(CALLBACK*)(HWND,UINT,UINT,DWORD))TimerProc); 
    ==========
    定时器总是和窗口相关的,上面的HWND是什么啊?
      

  2.   

    调用的全局,HWND只是回调函数TimerProc的形参而已
      

  3.   

    定时器本质上还是通过WM_TIMER来工作的,你将定时器放在线程里,又没有窗口,这个消息如何取得呢?
      

  4.   

    这个 Timer 所在工作线程结束了。
    可以用 UI 线程做。
      

  5.   

    DWORD WINAPI SendProc(LPVOID lpParameter) 

    int i=*((int *)lpParameter); 
    ::SetTimer(NULL,i,1000,(void(CALLBACK*)(HWND,UINT,UINT,DWORD))TimerProc); 
     MSG msg;
            while (GetMessage(&msg, 0, 0, 0))
                DispatchMessage(&msg);return 0;