单文档 多线程中无法调用Ondraw

totoam 2009-10-12 05:11:02
现在我准备做一个可以边处理数据边绘制图形的程序
所以使用了多线程
主线程用来绘图,还设置了一个进度条,用啦表示进度
另一个线程用来计算数据
但是现在的问题是 我的数据在计算着 进度条也在跑着 但是就是无法绘制图形
而当计算线程结束之后 就可以绘制图形了
请问这是问什么
在此多谢各位大侠先~~~~


对了 还有一个问题
我想在视图内动态生成一个按钮 当有进度条时 按钮无法显示出来 而当进度条窗口关闭后 就可以显示了
...全文
230 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zghanhailiang 2009-11-30
  • 打赏
  • 举报
回复
如果占用CPu比较高,可以用事件响应试试。waitforsingleobject(..),waitformultipleobjects(..)
totoam 2009-10-12
  • 打赏
  • 举报
回复
我在那个点击函数里是做了一个循环的。。。不停地接受数据 重绘图形
我现在又开了一个图像线程 直接GetDC 在这里画可以画 但是占用Cpu很高啊 有没有什么办法解决呢
oyster2008 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 totoam 的回复:]
是的  是把invalidate放到主线程了
难道不能这样  一定要另外再开一个绘图线程么?
[/Quote]
你这样的话只会重画一次,你如果想根据工作线程的计算结果实时绘图的话必须在工作线程中通知主线程重绘
totoam 2009-10-12
  • 打赏
  • 举报
回复
是的 是把invalidate放到主线程了
难道不能这样 一定要另外再开一个绘图线程么?
oyster2008 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 totoam 的回复:]
啊 各位大侠  我是才开始学习多线程的
什么是UI线程呢。。。
我现在就是在一个点击函数里 创建了一个工作线程 并且在这个函数里 绘制图像到兼容DC上
最后再Invalidate() 一下  线程间也没有通信。。。
或者大家能否告诉我 一般在做这种程序时都是怎么做的  难道还需要一个绘图线程么?
[/Quote]
估计你把invalidate放到主线程了
一名程序员 2009-10-12
  • 打赏
  • 举报
回复
我记得多线程绘图时,是会出现同步的问题。也就是说,虽然发送了消息,但处理消息的函数实际上处于阻塞状态,没有被真正执行。详情,你再看看msdn中SendMessage和PostMessage的详细帮助。特别注意这两个消息函数的实现机制。
totoam 2009-10-12
  • 打赏
  • 举报
回复
啊 各位大侠 我是才开始学习多线程的
什么是UI线程呢。。。
我现在就是在一个点击函数里 创建了一个工作线程 并且在这个函数里 绘制图像到兼容DC上
最后再Invalidate() 一下 线程间也没有通信。。。
或者大家能否告诉我 一般在做这种程序时都是怎么做的 难道还需要一个绘图线程么?
验证码识别 2009-10-12
  • 打赏
  • 举报
回复
MFC中,一个消息函数执行完才能执行另一个消息函数

多线程的话,最好别使用消息函数
雪影 2009-10-12
  • 打赏
  • 举报
回复
lz的工作线程和UI线程是如何同步(通信)的?即如何来通知UI线程更新界面的?
快乐鹦鹉 2009-10-12
  • 打赏
  • 举报
回复
你怎么调用的啊。不要在线程中调用啊。这样等于占用线程中的时间片,需要发消息让主线程进行刷新才行。
oyljerry 2009-10-12
  • 打赏
  • 举报
回复
你工作线程中发送消息给UI线程,让UI线程来刷新,Invalidate()
totoam 2009-10-12
  • 打赏
  • 举报
回复
调用了 Invalidate()
跟踪也到了这一步了 晕 但是为什么进不了 ondraw 啊。。。
快乐鹦鹉 2009-10-12
  • 打赏
  • 举报
回复
那你调用绘制图形的方法了么????

15,976

社区成员

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

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