2011-08-28 63 views
0

我正在开发一个使用Qt的跨平台分形探险器。我在使用Windows XP(使用MSVC Express 2010编译的程序)在单核CPU上运行时遇到性能问题,我没有尝试过其他版本的Windows。有了两个内核,程序运行良好。它在Linux下运行良好,可以使用一个内核或两个内核(使用GCC编译)。Windows XP上单核CPU的Qt线程问题

性能问题与通过计算线程中的信号调用小部件中的插槽有关。该小部件包含一个QImage,并将其像素的指针传递给计算线程。线程计算分形并将像素绘制到图像上。在每行结束时,线程向小部件发出一个信号,告诉它更新主线程中的显示。据我了解,这是一个排队的连接。

对于Windows和单个CPU,更新速度非常慢,比计算速度慢得多。它使程序无法使用。

相关代码与Qt文档中的Mandelbrot示例类似,但我的信号没有参数,因为Qimage位于窗口小部件中,而不是线程,并且我没有将QImage转换为QPixmap。

有没有人有任何想法可以解决问题,以及如何解决它?这与调度,时间片分配有关吗? MSVC中是否存在需要设置的编译器标志?或者我需要修改我的程序?

非常感谢!

+1

您说的代码与Mandelbrot示例类似 - Mandelbrot示例是否也展示了该问题?换句话说,问题可能是由于你列出的差异或不是? –

+0

这是一个好主意,我将不得不尝试。 –

回答

0

你说这个更新比计算慢 - 多慢?你有没有做过任何全面的分析,看看究竟发生了哪些瓶颈?粗略谷歌发现this profiler哪些可能会帮助你。

请记住,对于较老的CPU,线程上下文切换非常昂贵。这可能是你的问题的一部分,虽然我不知道具体情况。

+0

不,我没有做过任何分析,感谢您的建议。如果我禁用了行更新并且只在计算结束时进行更新,那么只需几秒钟即可完成。随着更新,它需要更多的时间。我必须时间更精确。 –

+0

我尝试了每20ms或每行发送更新信号,以最后一个为准。这极大地提高了性能,所以看起来上下文切换是罪魁祸首。我将不得不重新设计一些代码。谢谢您的帮助。 –

+0

Np,很高兴我能帮上忙。 – pg1989