当前位置: 首页 > news >正文

Qt信号槽与函数直接调用性能对比

1. 测试方法

定义一个类Recv,其中包含一个成员变量num和一个成员函数add(),add()实现num的递增。
另一个类Send通过信号槽或直接调用的方法调用Recv的add函数。
单独开一个线程Watcher,每秒计算num变量的增长数值,作为add函数被调用的次数。

class Recv : public QObject {Q_OBJECT
public:unsigned long long num = 0;void add() {num++;}
};class Send : public QObject {Q_OBJECT
public:Send() = default;Send(Recv* r) : r(r) {};void run() {while (true) {emit sig();  // 发送信号,绑定add函数为槽函数//r->add();  // 直接调用}}
signals:void sig();
private:Recv* r;
};class Watcher : public QThread {Q_OBJECT
public:Watcher(Recv* r) : r(r) {}void run() {while (true) {qDebug() << r->num - t;  // 计算num的增长t = r->num;QThread::sleep(1);}}
private:Recv* r;unsigned long long t = 0;
};

2. 信号槽调用

int main(int argc, char* argv[])
{QApplication a(argc, argv);Recv r;//Send s(&r);Send s;QObject::connect(&s, &Send::sig, &r, &Recv::add);Watcher* w = new Watcher(&r);w->start();s.run();return a.exec();
}

输出:
在这里插入图片描述
每秒调用约 6 × 1 0 7 6\times 10^7 6×107

3. 直接调用

输出:
在这里插入图片描述
每秒调用约 4 × 1 0 9 4\times 10^9 4×109

4. 结论

信号槽相比函数直接调用慢60倍

http://www.lryc.cn/news/367629.html

相关文章:

  • Python中的异常处理:try-except-finally详解与自定义异常类
  • vscode软件上安装 Fitten Code插件及使用
  • 人工智能小作业
  • 程序员搞副业一些会用到的工具
  • k8s更改master节点IP
  • c++【入门】已知一个圆的半径,求解该圆的面积和周长?
  • c#通过sqlsugar查询信息并日期排序
  • 使用 Qwen-Agent 将 8k 上下文记忆扩展到百万量级
  • Vyper重入漏洞解析
  • 53.ReentrantLock原理
  • “论边缘计算及应用”必过范文,突击2024软考高项论文
  • 浅谈安全用电管理系统对重要用户的安全管理
  • Docker的资源限制
  • MongoDB $rename 给字段一次重新命名的机会
  • OnlyOwner在Solidity中是一个修饰符,TypeError:
  • 数据Ant-Design-Vue动态表头并填充
  • 验证码案例
  • python身份证ocr接口功能免费体验、身份证实名认证接口
  • 屏幕空间反射技术在AI绘画中的作用
  • JDK下载安装Java SDK
  • 【ARM Cache 系列文章 1.2 -- Data Cache 和 Unified Cache 的详细介绍】
  • Debian13将正式切换到基于内存的临时文件系统
  • 设计模式-工厂方法(创建型)
  • 分布式事务大揭秘:使用MQ实现最终一致性
  • 【IoT NTN】3GPP R18中关于各类IoT设备在NTN中的增强和扩展
  • vs - vs2015编译gtest-v1.12.1
  • 你好GPT-4o——对GPT-4o发布的思考与看法
  • QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数
  • 宝塔nginx配置
  • 容器化实践:DevOps环境下的容器交付流程