16,744
社区成员




说来惭愧,使用qt很多年了,也只应用到QThread和movetothread,至今没有用过线程池。
之前一个项目是纯计算类的软件,大概内容是把一个立体图形切分成n个微元,计算每个微元到平台每个点的距离,再根据物体的密度之类的求效率。计算量非常的大,我把物体微元到平台微元的效率计算公式整合到了一个函数中,所以整个计算过程就是反复调用这个函数。但目前只是在一个线程中处理计算,cpu的利用率低,我想能不能把这个函数分布到多个线程中,减少计算时间?
下面是我简化后的代码
class GlobalFormula : public QThread
{
Q_OBJECT
public:
explicit GlobalFormula(QObject* parent = nullptr);
void setParams(DetectorParam detector,CharactParam param);
void setSample(Cylinder sam);
protected:
void run() override;//在run函数中调用cylinder函数,开始计算
private:
double cylinder()//计算圆柱效率函数
{
double result = 0;
for(...){
for(...){
for(...){
result += topEff(...);//整个计算过程简化为反复调用topEff
}
}
}
}
double topEff(float inx,float iny,float inz);//微元间效率计算函数
//由于计算过程中还需要很多参数参与,所以topEff函数中会调用一些成员变量,因此topEff函数无法从
这个类中剥离
}
我看了网上很多QtConcurrent,QFuture等资料,始终没找到适合我的用法,大家帮我看看能如何改进。