关于多线程编程

haierhaha 2008-04-29 09:44:21
为什么我得程序会出错呢?
请教了:


dlg.h文件

UINT SaveData(LPVOID pParam);
dlg.cpp文件
CEvent m_savetosqlevent;//线程同步全局变量

Dlg::OnInitDialog()
{
psavedataThread=AfxBeginThread(SaveData,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
psavedataThread->ResumeThread();//psavedataThread为dlg的成员变量


}
Dlg::ontimer()//定时器函数
{


m_savetosqlevent.SetEvent();
psavedataThread->ResumeThread();

}

UINT SaveData(LPVOID pParam)
{
CPcsDlg *pMainDlg = (CPcsDlg *)pParam;//

WaitForSingleObject(m_savetosqlevent.m_hObject,INFINITE);

CString str;
str.Format("%.2f",pMainDlg->ps7dataA[1].value);
pMainDlg->SetDlgItemText(IDC_STC_SHOWVALUE,str);

pMainDlg->psavedataThread->SuspendThread();


return 0;
}
...全文
54 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blastzgd 2008-04-30
  • 打赏
  • 举报
回复
注意将针对MFC对象的操作同步.
haierhaha 2008-04-29
  • 打赏
  • 举报
回复

以前没做过,现在知道了,
还想请教一下,多线程说对mfc类对象不是安全的,那么对传递的参数有什么特殊的要求没啊?
或者说在传递参数的时候应该注意些什么呢?
blastzgd 2008-04-29
  • 打赏
  • 举报
回复
你的线程工作函数设计有误:
pMainDlg->psavedataThread->SuspendThread();
首次执行到此处暂停后,下次恢复就直接执行到return 0了.于是线程结束.

如果你想在Ontimer处激活线程以执行相同的操作,你需要将操作放在一个循环体内,并在循环体的底部加入Suspendthread
jiuchang 2008-04-29
  • 打赏
  • 举报
回复
线程里应该是个死循环吧
cnzdgs 2008-04-29
  • 打赏
  • 举报
回复
出什么样的错?

15,467

社区成员

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

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