入题,我想将OnTimer() 方法放到新线程中去执行,因为我的程序有一个1S的定时,在OnTimer() 中新开了一个线程,等待800MS没有返回就强制返回,在我的对画框界面上有个按钮,执行一个BOOL变量的赋值,但是现在的情况是我点击按钮,线程就强制返回来,请教各位高手帮帮,感激不尽

解决方案 »

  1.   

     CWinThread *pThread=AfxBeginThread(OptionUart,GetSafeHwnd()); if(::WaitForSingleObject(readOKEvent,900)!=WAIT_TIMEOUT)  //如果超过900MS 就会自己返回,readOKEvent 是CEvent 对象,会在线程中设置值,是个全局变量,我就想知道能不能在线程中执行OnTimer()方法,
      

  2.   

    CWinThread *pThread=AfxBeginThread(OptionUart,this);线程函数里,通过传过去的this指针访问OnTimer函数 
      

  3.   

    等待线程结束不需要使用另外的事件,用WaitForSingleObject等待线程句柄就可以。
    除了极少数与当前线程有关的操作外(例如响应消息等),绝大多数操作都可以在线程中执行。
      

  4.   

    你们没有明白我的意思,OnTimer() 方法是自动调用的,我想把它放到线程中,一直运行线程,直到程序退出,然后OnTimer() 方法放到线程中,依然可以自动调用.
      

  5.   

    可以在主窗体定时给线程发送自定义消息,定时去触发线程void CTestDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    for (int i=0; i<100; i++)
    {
    if (m_pClientThread[i] != NULL)
    m_pClientThread[i]->PostThreadMessage(WM_MYTEST_MSG,0,0);
    }
    CDialog::OnTimer(nIDEvent);
    }