MFC工作线程与界面假死的问题

yemeiling_xiaoming 2009-07-22 04:56:01
实验室最近开发的一个项目中的问题:
我的项目程序界面结构是:左侧是一个CTreeCtrl控件,右侧是一个放置对话框的区域(将对话框资源动态创建到该区域,类似最新版的卡巴斯基界面结构),在右侧窗口中添加一个进度条,使用工作线程来更新(线程体函数的参数是创建线程类的this指针,使用该指针设置进度条的pos),左侧的CTreeCtrl控件添加了ToolTip功能,现在出现的一个问题就是当进度条运行时,将鼠标放在Tree控件上时,界面就会卡住或者进度条死掉。请问这个该如何解决。
...全文
820 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yemeiling_xiaoming 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dronly 的回复:]
你的问题在于你的程序很多过程处理的速度的问题

你的函数过程占用CPU时间太长,又或者你的程序只处理功能和数据,没有顾及界面的更新

其实仅仅是因为进度条的问题的话建议楼主还是不要用线程,这样不仅容易出现死锁

代码量也比以前最大

最简单和安全的避免死锁的方法是永远只锁一次,不要锁两次,但这样会导致很多地方出现内存拷贝的情况

代码量是不用线程的时候的1倍以上
[/Quote]
这种并行的界面和数据处理问题不用多线程必然会导致界面的响应问题吧...
  • 打赏
  • 举报
回复
界面和工作分开时硬道理
dronly 2009-07-22
  • 打赏
  • 举报
回复
你的问题在于你的程序很多过程处理的速度的问题

你的函数过程占用CPU时间太长,又或者你的程序只处理功能和数据,没有顾及界面的更新

其实仅仅是因为进度条的问题的话建议楼主还是不要用线程,这样不仅容易出现死锁

代码量也比以前最大

最简单和安全的避免死锁的方法是永远只锁一次,不要锁两次,但这样会导致很多地方出现内存拷贝的情况

代码量是不用线程的时候的1倍以上
yemeiling_xiaoming 2009-07-22
  • 打赏
  • 举报
回复
在使用SendMessage发送消息时同样会产生死锁吧,如果是使用postmessage的话这个不是实时的响应的呢...

对于我的这种界面设计中存在什么缺陷呢,应为里面经常会出现界面不能点击,否则就会卡死的状态。
WooSir 2009-07-22
  • 打赏
  • 举报
回复
同意2楼的,可以考虑在工作线程内用自定义消息通知主界面的更新。请参考我的博文:http://blog.csdn.net/WooSir/archive/2009/07/15/4351977.aspx
pady_pady 2009-07-22
  • 打赏
  • 举报
回复
顶下,工作线程直接操作界面容易出现资源占用问题
dronly 2009-07-22
  • 打赏
  • 举报
回复
工作线程直接操作界面是不合理的,因为主线程也在不断的访问界面

而且操作的时候工作线程不能处理界面递交的消息

让工作线程PostMessage到界面,同时修改WndProc函数处理你自己的消息

在窗口的消息处理函数中去处理你自己的进度条。

Ryanwen 2009-07-22
  • 打赏
  • 举报
回复
死锁了
工作线程不要更新界面,发消息给界面线程更新

15,471

社区成员

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

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