C++ Windows XP上单核CPU的Qt线程问题

C++ Windows XP上单核CPU的Qt线程问题,c++,windows,multithreading,qt,qthread,C++,Windows,Multithreading,Qt,Qthread,我正在使用Qt开发一个跨平台的分形资源管理器。在Windows XP(使用MSVC Express 2010编译的程序)下运行单核CPU时,我遇到了一个性能问题,我没有尝试过其他版本的Windows。有两个内核,程序运行良好。它在Linux下也可以运行良好,有一个内核或两个内核(使用GCC编译) 性能问题与通过计算线程中的信号调用小部件中的插槽有关。小部件包含一个QImage,我将指向其像素的指针传递给计算线程。线程计算分形并将像素绘制到图像。在每一行的末尾,线程向小部件发出一个信号,告诉它更新

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

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

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

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

有没有人知道问题可能是什么,以及如何着手解决?这与时间安排、时间分割和分配有关吗?MSVC中是否有需要设置的编译器标志?或者我需要如何修改我的程序


非常感谢

你说更新比计算慢-慢多少?您是否进行过全面的分析,以了解瓶颈到底发生在哪里?一个粗略的谷歌搜索可能会帮助你


请记住,对于较旧的CPU,线程上下文切换非常昂贵。这可能是您的问题的一部分,不过我也不知道具体细节。

您说代码与Mandelbrot示例类似-Mandelbrot示例是否也存在此问题?换句话说,问题是否可能是由于您列出的差异造成的?这是个好主意,我必须尝试一下。不,我没有做任何分析,谢谢您的建议。如果禁用按行更新,并且仅在计算结束时更新,则只需几秒钟即可完成。更新需要更多的时间。我必须更精确地计时。我试验过只每隔20毫秒或每行发出一次更新信号,以最后一行为准。这大大提高了性能,因此上下文切换似乎是罪魁祸首。我将不得不重新设计一些代码。感谢您的帮助。奔腾M 1.8 Ghz的上下文切换是否昂贵?如果我在计算的同时启用颜色滚动,那么计算实际上会停止。类似的情况发生在Fraqtive(也用Qt编写)上,但Ultra Fractal(一个商业分形程序,不是用Qt编写的)上。所以问题可能在于Qt如何处理Windows上的上下文切换?为什么需要在如此陈旧的计算机上编写此代码?即使您解决了特定的错误,使用至少有2个内核的现代系统,您的总体服务也会更好。