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

deh_1984 2008-07-29 06:42:15
入题,我想将OnTimer() 方法放到新线程中去执行,因为我的程序有一个1S的定时,在OnTimer() 中新开了一个线程,等待800MS没有返回就强制返回,在我的对画框界面上有个按钮,执行一个BOOL变量的赋值,但是现在的情况是我点击按钮,线程就强制返回来,请教各位高手帮帮,感激不尽
...全文
291 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
  • 打赏
  • 举报
回复
相关代码
打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/ufbv5 在Windows编程环境,MFC(Microsoft Foundation Classes)库提供了一种高效的方式来构建用户界面和应用程序。其,多线程技术可以用于实现复杂的并发操作,包括创建定时器功能。本篇文章将详细探讨如何在MFC利用多线程来实现定时器。我们需要了解MFC的`CWinThread`类,它是所有线程的基础类。创建一个新的线程时,通常会从`CWinThread`派生一个类,并重写其`Run`成员函数,这个函数将包含线程的主要执行逻辑。对于定时器功能,MFC提供了一个`CWinApp::OnTimer`方法,它会在指定的时间间隔被调用。然而,这个方法是在主线程运行的,如果需要在后台线程实现定时功能,我们就需要自定义一个基于多线程的定时器。步骤如下:1. **创建线程类**:从`CWinThread`派生一个新类,例如`CMyTimerThread`,并重写`Run`函数。在这个函数里,我们将实现定时器的逻辑。```cppclass CMyTimerThread : public CWinThread{ DECLARE_DYNCREATE(CMyTimerThread)public: virtual int Run() override; // 其他必要的成员函数和数据成员};```2. **定时器逻辑**:在`Run`函数,我们可以使用`Sleep`函数来设置线程的休眠时间,达到定时的效果。例如,如果希望每隔1秒执行一次,可以这样写:```cppint CMyTimerThread::Run(){ while (m_bAutoDelete) { // 执行定时任务 // ... // 休眠1秒 Sleep(1000); } return 0;}```3.

15,466

社区成员

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

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