读书人

怎么在新建的线程中调用定时器

发布时间: 2013-03-17 13:48:31 作者: rapoo

如何在新建的线程中调用定时器?
本帖最后由 yisiyou 于 2013-03-06 11:31:03 编辑 在主对话框中新创建了一个线程,然后在线程函数中调用设置定时器函数,运行出错,弹出警告框,提示定时器设置错误。
部分代码如下:
在主对话框的OnInitDialog函数中创建线程:
pThread = AfxBeginThread(ThreadFunc, &Info); //创建线程 2013-3-6
线程函数:
UINT ThreadFunc(LPVOID lpParam)
{
threadInfo* pInfo = (threadInfo*)lpParam;
CMAINDlg dlg;

dlg.SetTimer(1,3,NULL);//设置主函数的定时器1 接收分析数据 2013-3-6
MSG msg;
while (1)
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
}
return 0;
}
定时器函数:
void CMAINDlg::OnTimer(UINT nIDEvent)
{
Receive_Data();//分析接收到的数据
}
函数的声明和变量定义等都不在这里写出来了。
请高手帮我指点下线程函数中如何调用定时器?万分感谢~
[解决办法]
CMAINDlg dlg;

dlg.SetTimer(1,3,NULL); //设置主函数的定时器1 接收分析数据 2013-3-6

这样的代码咋行呢?对话框还没有创建呢,只是构造了一下。窗体对象还没有,无消息循环啊
[解决办法]
那要看你这个函数干了些什么。如果用到了对话框的控件对象,同样是不行的。
[解决办法]
在主对话框的OnInitDialog函数中创建线程:
pThread = AfxBeginThread(ThreadFunc, this); //创建线程 2013-3-6
线程函数:
UINT ThreadFunc(LPVOID lpParam)
{
CMAINDLG* p = (CMAINDLG*)lpParam;
p->SetTimer(1,3,NULL); //设置主函数的定时器1 接收分析数据 2013-3-6
while(1){ Sleep(1000); }
return 0;
}
定时器函数:
void CMAINDlg::OnTimer(UINT nIDEvent)
{
Receive_Data(); //分析接收到的数据
}

读书人网 >VC/MFC

热点推荐