我有一个win32应用程序,它可以非常快地更新对话框中的许多矩形。(现在通过bitblt(有点双重缓冲),之前它是一种不同的方法--这并不重要)。
在随机时间过去后-随机对话框(从那个应用程序,更新矩形)只挂在我的电脑上。所谓挂起,我指的是它的重画挂起,如果我按下一个菜单按钮,弹出一些它能工作的东西,但是对话框没有显示任何东西只是被卡住了。在调整尺寸之前,它会一直被卡住!或者重新启动应用程序ofc。
这只发生在我的‘快速’PC与3台式机(通过不同的gpus控制)。我的“慢”笔记本电脑没有复制这个,或者它可能需要更多的时间来复制这个(比如说,不是一个晚上),因为它更慢了?
我在c++,windows对话框编程方面真的很新--我可能滥用了某些东西或者做了一些错误的事情。我检查了我所能做的一切,重温了微软关于对话框(和每个绘图功能)使用的教程,检查了所有的东西--没有找到任何东西。
也许有人能给我提供比禁用随机功能更聪明的东西,等待它会不会挂起?我想了解它为什么会崩溃(挂起),以及为什么会这样。
操作系统: Microsoft 7 64编译器: Visual studio 2013
添加:调试器停止时:主线程只显示主对话框的入口。DialogBox函数仅此而已。Ofc线程正在运行所有其他对话框,但是这些对话框是从DialogBox调用的主对话框中运行的。绘图是由不同的线程完成的,甚至没有注意到对话框挂起了。主线程不会“挂起”,因为其他对话框运行得很好。如果调整大小,这个“挂起的”对话框是固定的,太奇怪了。
通过不同的线程进行绘图:对话框由主线程运行,其他线程(实际上是一对线程,优先级比其他线程低)负责这些对话框上的biblt和其他绘图逻辑操作(因为多达600个矩形可以更新到100 be,它绘制的CPU相当好)。我确实解决了关键的部分问题和资源,当使用不太好时,释放资源,但我要做的第一件事是-重新检查那些。
发布于 2014-12-19 11:17:09
你根本不应该从其他线程中抽签。
但是,对于单个线程来说,绘制位图(即内存中的位图)是安全的,然后将该位图交给主线程进行位转换。这可以进行缩放,因为您可以让多个线程准备多个位图,并且主线程位依次设置为每个位图。
https://stackoverflow.com/questions/27563970
复制相似问题