UpdateAllViews和线程的问题

baiyizhujian 2008-10-22 04:07:01

UINT SampleThread(LPVOID pParam)
{
CMPFMSDoc *pDoc=(CMPFMSDoc*)pParam;
//m_cal_state=1;//线程正在采样
pDoc->OnSample();

//m_cal_state=0;//线程采样结束, 恢复初始值
return 0;
}
void CMPFMSDoc::OnMenustart()
{
OnThreadDraw();

}
void CMPFMSDoc::OnThreadDraw()
{
//CMPFMSDoc *pDoc=GetDocument();
//if(SampleThread==NULL)
AfxBeginThread((AFX_THREADPROC)SampleThread, this);

}

void CMPFMSDoc::OnSample()
{
POSITION pos=GetFirstViewPosition();
LeftView1_01 *pLeftView1_01=(LeftView1_01 *)GetNextView(pos);

double a=100;
double b=3.14;
double temp;
//c.SetSize(1024,100);

for(int i=0;i<1024;i++)
{
temp=double(a*sin(b*i/180));
//temp=double(abs(rand())%100);
//double x(temp);
CPoint p1(i,temp);
// c.SetAt(i.pt)
c.Add(p1);
}
CDocument::UpdateAllViews(pLeftView1_01,0,NULL);}





本人设计的是菜单启动一个线程。这个线程在文档中采集数据。视图显示这些数据。
运行程序弹出提示对话框,说程序错误!Debug Assertion failed!
经跟踪,CDocument::UpdateAllViews(pLeftView1_01,0,NULL);}
这个调用好像有问题 !!!

以前不用线程的时候没有问题。估计这个可能和线程有关联吧

大家帮帮忙 看看到底是什么问题!
...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-11-01
  • 打赏
  • 举报
回复
送出一个自定义消息,回到原线程中,告诉它更新它的view.
可以看看《win32多线程程序设计》侯捷译 的第10章 MFC中的线程,他提到了。
cdef9108 2008-10-31
  • 打赏
  • 举报
回复
这样是破坏了主线程的消息循环了吗?
还是找不到相应的窗口过程来处理?
孤客天涯 2008-10-23
  • 打赏
  • 举报
回复
SampleThread线程中不能调用UpdateAllViews,
在线程中通过PostMessage的方法,窗口收到消息后再调用UpdateAllViews
dirdirdir3 2008-10-23
  • 打赏
  • 举报
回复
线程中不能调用UpdateAllViews,因为它使用的HWND的线程相关的伪handle.........
VsirSoft 2008-10-22
  • 打赏
  • 举报
回复
跨线程应该采用消息的方式响应
cnzdgs 2008-10-22
  • 打赏
  • 举报
回复
UpdateAllViews只能在本线程中调用。
你可以自定义消息,在线程中给窗口发消息,窗口收到消息后自己调用UpdateAllViews。
yjgx007 2008-10-22
  • 打赏
  • 举报
回复
Debug Assertion failed!定位行在哪里?查下call stack..

15,471

社区成员

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

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