qt+Linux+arm多核CPU 亲和性

复制代码
#include <QCoreApplication>
#include <QThread>
#include <pthread.h>
#include <sched.h>
#include <iostream>

void setThreadAffinity(int coreId) {
    cpu_set_t cpuset;
    CPU_ZERO(&cpuset);
    CPU_SET(coreId, &cpuset);// 设置线程执行在cpu编号为cpu的核上

    // 获取当前线程ID
    pthread_t thread = pthread_self();
    // 设置当前线程的亲和性
    int result = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
    if (result != 0) {
        qWarning() << "Failed to set thread affinity, error code:" << result;
    } else {
        qDebug() << "Thread successfully bound to CPU" << cpu;
    }
}

class WorkerThread : public QThread {
public:
    void run() override {
        setThreadAffinity(1);  // 绑定到 CPU 核心 1
        std::cout << "Thread is running on core 1" << std::endl;
        // 模拟一些工作
        for (int i = 0; i < 1000000; ++i);
    }
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    WorkerThread worker;
    worker.start();

    return a.exec();
}

目前大部分的CPU都支持多核,QT的主线程默认运行在第一个CPU的核心中,当执行复杂而耗时的任务是,程序界面有可能会出现卡顿,而其它的核心又没用到,白白浪费了资源。

qt的QThead类本身是没有设置cpu亲和性的接口的,需要自己封装一个接口将QT线程运行到指定的cpu核心中。

前提是要确定cpu是支持多核的

相关推荐
NiKo_W14 分钟前
Linux TcpSocket编程
linux·服务器·网络·udp·socket·多线程·tcp
Eternal-Student20 分钟前
【ubuntu】在Linux系统上安装Microsoft Edge浏览器
linux·ubuntu·microsoft
谅望者21 分钟前
Linux文件查看命令完全指南:cat、less、head、tail、grep使用详解
linux·excel·less·shell·文件操作·命令行·系统运维
casdfxx1 小时前
blender实现手柄控制VR视角
linux·vr·blender
信看1 小时前
树莓派 ADS1263 各种库程序
linux·运维·服务器
爱奥尼欧1 小时前
【Linux笔记】网络部分——传输层协议TCP(2)
linux·网络·笔记·tcp/ip
嵌入式小李.man2 小时前
linux中多路复用IO:select、poll和epoll
linux·c++
---学无止境---2 小时前
Linux中完成根文件系统的最终准备和切换prepare_namespace函数的实现
linux
郝学胜-神的一滴2 小时前
QAxios研发笔记(二):在Qt环境下基于Promise风格简化Http的Post请求
开发语言·c++·笔记·qt·网络协议·程序人生·http
大白的编程日记.2 小时前
【Linux学习笔记】线程安全问题之单例模式和死锁
linux·笔记·学习