关于Qt的多线程、线程池具体应用

苏州安瑞软件有限公司 2025-01-15 16:27:52

说来惭愧,使用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等资料,始终没找到适合我的用法,大家帮我看看能如何改进。

...全文
135 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,744

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧