Doc/View和多线程的问题

verybigbug 2002-11-01 12:31:05
使用Doc/View开发的MDI程序,Doc中接受数据后,通过UpdateAllView()更新
View的显示。如果Doc中接受的数据是主线程的数据进行更新时没有问题,但当
我用另外的线程接受数据,修改doc的内容后,同时在该线程中调用UpdateAllView()
时就会出现错误(程序结束了)。原因是doc中的view不是该线程的。

不知道各位是如何解决这个问题的。
...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
icelight 2002-11-12
  • 打赏
  • 举报
回复
这样吧,专门用一个线程代替"Doc自动通知View"这个动作,好不好?

这样你的负责采集数据的几个线程就不需要理会界面的东东了,实现了代码块之间的松藕合。
verybigbug 2002-11-03
  • 打赏
  • 举报
回复
MFC的线程机制真的不好,在C++Builder或SDK中根本就没有这些问题。
本来用Doc/View就是希望Doc自动通知View了,现在又用SendMessage!!
真是不好。从设计角度讲,考虑脱离平台的设计,就不会出现需要
SendMessage的方案。因为数据的采集有可能是其它线程,也有可能是
主线程,设计上是不用限制的。有数据就通知View显示而已,而不用
考虑数据的来源。。。本来MVC(Mode-View-Control)模式就不用考虑
SendMessage的,在MFC上使用Doc/View实际上就是希望完成MVC的模式
的,没想到MFC这个垃圾这么差。。。。痛苦中。。。。
liron71 2002-11-02
  • 打赏
  • 举报
回复
一个线程内不能直接操作另一个线程内的MFC对象,这是线程机制决定的,线程只能通过发消息的方式通知另一个线程内的MFC对象,Window的消息机制已有同步机制在里面了
foxustc 2002-11-02
  • 打赏
  • 举报
回复
MFC的doc/view结构确实不怎么样。
yonghengdizhen 2002-11-01
  • 打赏
  • 举报
回复
用SendMessage你还需要考虑什么同步..
同步的问题在这个函数中已经处理了..
SendMessage是解决线程间或进程间通信的一种最简单的方式了..
verybigbug 2002-11-01
  • 打赏
  • 举报
回复
那就要考虑同步问题等。本来目标就是让其他线程采取数据和自动显示。
如果通知主线程的话,我就不希望采用Doc/View了。

我觉得很奇怪的是MFC居然如此差。

没有别的办法吗(简单一点的)。

否则就自己控制Doc/View了。
Semigod 2002-11-01
  • 打赏
  • 举报
回复
那就从另外的线程向主线程发送个自定义消息,让主线程来更新啦

15,471

社区成员

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

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