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

相关推荐
一只QAQ3 分钟前
python语法学习
linux·python·学习
女神下凡8 分钟前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
奇树谦15 分钟前
Qt | 基于 GVCP 协议的 GigE 工业相机 IP 配置工具
数码相机·qt·tcp/ip
by2099921 分钟前
Linux 软件安装与 Vim 编辑
linux·经验分享·vim
CQU_JIAKE25 分钟前
10.28【A】
linux·运维·网络
爱和冰阔落28 分钟前
【Linux网络】Socket 编程前要搞懂什么?从 IP、端口到字节序与 sockaddr,一次理清网络通信基础
linux·运维·网络·tcp/ip
陌上花开缓缓归以36 分钟前
liteos 内存分布
arm开发
晚风叙码44 分钟前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
邪修king1 小时前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
坤坤子吖1 小时前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习