MFC单文档应用程序,我这个需要用到多线程吗?

duoxiangliuti 2010-10-21 04:17:23
上位机软件,主界面要实时显示传感器的状态,还有几个对话框的界面,也需要实时绘制曲线显示,如果建的是模态对话框的话,当我显示子界面的时候,主界面还有消息响应吗?还能实时更新状态吗?这个跟建模态对话框和非模态对话框有关系吗?
当对话框界面处于显示状态时,它才会实时更新数据显示,但隐藏了之后再显示出来,隐藏那一段时间就没有数据曲线显示,我这个情况需要用到多线程吗?
第一次用vc++,第一次做上位机,望大家指教
...全文
155 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
momosp 2010-10-23
  • 打赏
  • 举报
回复
最好用多线程,下位机的速度太快了,要不跟不上的
老夏 2010-10-23
  • 打赏
  • 举报
回复
给非模态对话框发消息,在非模态对话框里处理消息(绘制曲线)。

非模态的对话框退出的时候要自己销毁窗口,一般重载 OnCancel() 在里头调用 DestroyWindow();,这样才会响应 OnClose() 和 OnDestroy()
向立天 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 duoxiangliuti 的回复:]
引用 8 楼 xianglitian 的回复:
你需要一个独立线程去处理合下位机的通信
然后给不同界面发消息显示就是了

我还有个问题希望你能帮我解答
我建一个对话框应用程序,添加了一个子对话框,我点击子对话框的关闭按钮,他只执行OnClose(),没有执行OnDestroy(),是不是这个子对话框的消息循环没有退出?关闭主对话框就是先执行OnClose(),接着执行OnDestro……
[/Quote]
子对话框只是隐藏了
没有销毁窗口
test_machine 2010-10-22
  • 打赏
  • 举报
回复
你应该使用多线程,工作线程负责从端口中读取到缓冲队列,(为什么用缓冲队列,因为你的数据要存储到文件,访问文件是耗时操作,你可以从缓冲队列读取数据后再存储到文件),另外,你都说了,是单文档界面,所以,你可以用视图进行曲线绘制,可以另外做一个对话框显示数据(肯定不是模态的),这个对话框你可;嵌在框架中!至于数据的更新,下面这个你可以参考一下:工作线程---->缓冲队列;工作线程---->发送消息到主窗口通知数据更新;主窗口---->收到消息,从队列中获取数据并显示,存储到文档,文档在数据存储后,可以调用updatteAllView(),更新视图(绘制曲线),这个函数是可以带参数的!你隐藏后,重新显示时应该通知窗口刷新一下!
傻X 2010-10-22
  • 打赏
  • 举报
回复
肯定需要多线程啊,不然达不到实时性啊,你有上位机,肯定用串口的吧.串口编程都是多线程的.不管模态非模态
duoxiangliuti 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianglitian 的回复:]
你需要一个独立线程去处理合下位机的通信
然后给不同界面发消息显示就是了
[/Quote]
我还有个问题希望你能帮我解答
我建一个对话框应用程序,添加了一个子对话框,我点击子对话框的关闭按钮,他只执行OnClose(),没有执行OnDestroy(),是不是这个子对话框的消息循环没有退出?关闭主对话框就是先执行OnClose(),接着执行OnDestroy(), 但我注释掉这两句ON_WM_CLOSE(),ON_WM_DESTROY(),对执行没有影响,很不理解?
向立天 2010-10-22
  • 打赏
  • 举报
回复
你需要一个独立线程去处理合下位机的通信
然后给不同界面发消息显示就是了
visualwind 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 duoxiangliuti 的回复:]

引用 3 楼 visualwind 的回复:

用非模态对话框啊,就相当于每个非模态对话框都有界面线程了

当我隐藏了非模态对话框之后,就没有绘制实时曲线了,当我下次再显示的时候,隐藏的那一段时间没有曲线绘制出来,我需要弄一个工作者线程吗?
[/Quote]

不用,直接给非模态对话框发消息,对话框接收消息后触发绘制曲线的操作。
duoxiangliuti 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualwind 的回复:]

用非模态对话框啊,就相当于每个非模态对话框都有界面线程了
[/Quote]
当我隐藏了非模态对话框之后,就没有绘制实时曲线了,当我下次再显示的时候,隐藏的那一段时间没有曲线绘制出来,我需要弄一个工作者线程吗?
ok208043624 2010-10-21
  • 打赏
  • 举报
回复
用非模态的嘛,就解决了
visualwind 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 duoxiangliuti 的回复:]

引用 1 楼 visualwind 的回复:
模态的时候主界面没有消息响应。最好不要在线程中绘制界面图形。

那怎么做呢?为每个对话框建用户界面线程?
[/Quote]

用非模态对话框啊,就相当于每个非模态对话框都有界面线程了
duoxiangliuti 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualwind 的回复:]
模态的时候主界面没有消息响应。最好不要在线程中绘制界面图形。
[/Quote]
那怎么做呢?为每个对话框建用户界面线程?
visualwind 2010-10-21
  • 打赏
  • 举报
回复
模态的时候主界面没有消息响应。最好不要在线程中绘制界面图形。

15,979

社区成员

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

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