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是支持多核的

相关推荐
Albert XUU30 分钟前
nettrace rtt分析器
linux·运维·网络·网络协议·网络安全·腾讯云·运维开发
做我想做1 小时前
虚拟机 CentOS 9 网络配置
linux·网络·centos
小小的木头人1 小时前
CentOS 8 更换软件源
linux·运维·centos
BetterJason1 小时前
ubuntu20不同版本的cudnn切换
linux
小林up2 小时前
Qt不同窗口类的控件信号和槽绑定
qt
奔跑中的小象2 小时前
低版本 Linux 系统通过二进制方式升级部署高版本 Docker
linux·docker
极客代码2 小时前
Linux IPC:System V共享内存汇总整理
linux·c语言·开发语言·并发·共享内存·通信·system v
小wanga2 小时前
【Linux】网络层、数据链路层、DNS、ICMP协议、NAT技术
linux·运维·网络
火车叼位3 小时前
命令`ls **/*.exe`遗漏本目录下文件?Bash的globstar配置了解一下
linux·shell
恋恋风辰3 小时前
QT系列教程(13) 事件系统
c++·qt·事件系统