如何在新建的线程中调用定时器?

时间:2022-12-17 19:12:35
在主对话框中新创建了一个线程,然后在线程函数中调用设置定时器函数,运行出错,弹出警告框,提示定时器设置错误。
部分代码如下:
在主对话框的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(); //分析接收到的数据
}
函数的声明和变量定义等都不在这里写出来了。
请高手帮我指点下线程函数中如何调用定时器?万分感谢~

5 个解决方案

#1


CMAINDlg dlg;

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

这样的代码咋行呢?对话框还没有创建呢,只是构造了一下。窗体对象还没有,无消息循环啊

#2


我把dlg.SetTimer(1,3,NULL);改成dlg.Receive_Data();也不行,直接调用接收函数也不行。

#3


那要看你这个函数干了些什么。如果用到了对话框的控件对象,同样是不行的。

#4


引用 3 楼 happyparrot 的回复:
那要看你这个函数干了些什么。如果用到了对话框的控件对象,同样是不行的。

没有用到对话框控件对象,我想知道线程函数调用其他函数的代码应该怎样写,麻烦说的详细点。我是新手。

#5


在主对话框的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(); //分析接收到的数据
 }

#1


CMAINDlg dlg;

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

这样的代码咋行呢?对话框还没有创建呢,只是构造了一下。窗体对象还没有,无消息循环啊

#2


我把dlg.SetTimer(1,3,NULL);改成dlg.Receive_Data();也不行,直接调用接收函数也不行。

#3


那要看你这个函数干了些什么。如果用到了对话框的控件对象,同样是不行的。

#4


引用 3 楼 happyparrot 的回复:
那要看你这个函数干了些什么。如果用到了对话框的控件对象,同样是不行的。

没有用到对话框控件对象,我想知道线程函数调用其他函数的代码应该怎样写,麻烦说的详细点。我是新手。

#5


在主对话框的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(); //分析接收到的数据
 }