【发布时间】:2016-01-12 16:06:22
【问题描述】:
这是一个 MFC 文档/视图应用程序:
是否有可能/有必要在单独的执行线程(即工作线程)中调用 OnDraw?在我们构建的软件中,我们在 Doc/View 应用程序中的视图存在巨大问题。也就是说,每次滚动视图时,都会花费很长时间,以至于应用程序冻结。
需要处理的位图比较大(平均超过 1GB)
谢谢。
【问题讨论】:
-
您通常希望将那个巨大的位图分解成图块(例如,每个图块的大小大致适合屏幕),这样您一次最多可以使用 4 个图块,并且位图的其余部分保持不受干扰。
-
我可能会得到该位图的缩小副本,在滚动时显示粗略图像,在单独的线程中计算细节并在准备好时更新屏幕。
-
通常你应该把大图片分成几块,如上所述。至于您问题的“可能”部分,是的,可以创建一个用于绘图任务的线程。但我认为在大多数 Doc/View 应用程序中它是不必要的。如果绘图任务太繁重,你可能应该换成 Direct2D 等。
-
在工作线程中开始缩放活动并在缩放版本准备好之前跳过 OnDraw 中的更新是有意义的。一旦它是,您使视图无效并重新绘制它。准备好缩放版本后,您可以绘制所需的东西。
-
@Thereisnothingwecando:不。您的问题不在于渲染,而在于处理。 Direct2D 会减慢渲染速度(如果有的话)。
标签: c++ multithreading mfc