怎样在一个新开的线程中执行OnTimer() 方法

deh_1984 2008-07-29 06:42:15
入题,我想将OnTimer() 方法放到新线程中去执行,因为我的程序有一个1S的定时,在OnTimer() 中新开了一个线程,等待800MS没有返回就强制返回,在我的对画框界面上有个按钮,执行一个BOOL变量的赋值,但是现在的情况是我点击按钮,线程就强制返回来,请教各位高手帮帮,感激不尽
...全文
294 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwc270 2008-09-01
  • 打赏
  • 举报
回复
可以在主窗体定时给线程发送自定义消息,定时去触发线程

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);
}
deh_1984 2008-09-01
  • 打赏
  • 举报
回复
你们没有明白我的意思,OnTimer() 方法是自动调用的,我想把它放到线程中,一直运行线程,直到程序退出,然后OnTimer() 方法放到线程中,依然可以自动调用.
还没淹死的鱼 2008-07-30
  • 打赏
  • 举报
回复
子线程当然可以执行主线程的方法

不过有啥后果就不好说了
量子高宏亮 2008-07-30
  • 打赏
  • 举报
回复
CWinThread *pThread=AfxBeginThread(OptionUart,this);

线程函数里,通过传过去的this指针访问OnTimer函数
deh_1984 2008-07-30
  • 打赏
  • 举报
回复
CWinThread *pThread=AfxBeginThread(OptionUart,GetSafeHwnd());

if(::WaitForSingleObject(readOKEvent,900)!=WAIT_TIMEOUT) //如果超过900MS 就会自己返回,readOKEvent 是CEvent 对象,会在线程中设置值,是个全局变量,

我就想知道能不能在线程中执行OnTimer()方法,
cnzdgs 2008-07-30
  • 打赏
  • 举报
回复
等待线程结束不需要使用另外的事件,用WaitForSingleObject等待线程句柄就可以。
除了极少数与当前线程有关的操作外(例如响应消息等),绝大多数操作都可以在线程中执行。
phisherr 2008-07-29
  • 打赏
  • 举报
回复
你不控制线程怎么会强制返回呢
cnzdgs 2008-07-29
  • 打赏
  • 举报
回复
相关代码

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧