PaintBox绘图,是否只能在主线程绘图?

hoskyloser 2011-09-02 10:28:37
我现在在做一个程序,是多线程处理数据,然后主线程在paintBox绘图,但是处理同步关系很难,我又不想使用Synchronize 因为使用这个方法其实也是在主线程绘图,然后再同步到子线程中。

而且子线程处理出来的数据非常大,如果Post到主线程的话会造成很大的内存申请,所以我想在子线程里面绘图,所以我想问子线程中是否可以绘图?因为在我印象中vcl只能主线程操作,请高手们帮帮忙!
...全文
165 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2011-09-02
  • 打赏
  • 举报
回复
可以在子线程里在Bitmap里画好,然后Synchronize,贴到PaintBox上。
yaowenwen1234 2011-09-02
  • 打赏
  • 举报
回复
恩~严重同意LS
haitao 2011-09-02
  • 打赏
  • 举报
回复
子线程操作界面vcl,必须Synchronize

线程间的数据互访,倒是不必post吧,只要加了适当的互斥就行了
bdmh 2011-09-02
  • 打赏
  • 举报
回复
可以在子线程,传递canvas,注意同步和canvas的加锁
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
自己顶一下!来高手帮忙!
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
好吧 谢谢lhylhy 方向是有了,概念也清楚了,剩下就得靠自己了。结贴。
lhy 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hoskyloser 的回复:]
如果不响应重绘的话,窗口被遮挡住,再露出来不就变成空白了?
[/Quote]
你在主线程再开个Bitmap,保留上次子线程Bitmap的图像,重绘的时候再贴一次就可以了。
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
还有就是如果主线程发重绘消息的话,会不会把整个界面弄成白白的了。。。。
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
Synchronize 这种方法我觉得很危险。
我现在一个线程计算数据,然后在一个窗口绘制这个数据,当我多开一个窗口时,需要向线程里增加一个object。当执行到Synchronize 方法时,同时开了一个窗口,这个时候因为主线程向子线程添加object时被锁住了,而Synchronize 方法又没有返回,造成了整个程序的死锁。

另外我可能多个object同时画图(多个object在一个线程内),那贴位图的方法就非常难控制了。
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
如果不响应重绘的话,窗口被遮挡住,再露出来不就变成空白了?
lhy 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hoskyloser 的回复:]
回2楼 5楼 如果在子线程里面绘制,那么主线程响应重绘的话怎么办?
[/Quote]
我是说你在子线程里面自己开个TBitmap画图,然后Synchronize中将Bitmap的图贴到PaintBox上。
hoskyloser 2011-09-02
  • 打赏
  • 举报
回复
回2楼 5楼 如果在子线程里面绘制,那么主线程响应重绘的话怎么办?

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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