c++ - Qt emit 需要 30 毫秒,这可能吗?

标签 c++ performance qt

我正在努力提高我的项目的性能,所以我想弄清楚哪个操作需要时间。

我注意到我的 emit 函数需要 30 毫秒,这可能只是为了发送数据吗?

代码如下:

void MainWindow::play(){

unsigned char* img;     //Size is 1280*720*2

img = camera1->captureLastFrame();

timer.start(); 

emit video(img); 

qDebug()<<QString::number(timer.nsecsElapsed()/1000000) + " ms";

}

qDebug 显示 30 毫秒。我做错了什么,或者真的是该操作所需的时间吗?

编辑:

信号和槽声明/连接。

signals: 

     void video(unsigned char* copy);

private slots: 

     void play();

connect(this, SIGNAL(video(unsigned char*)), ui->widget, SLOT(videodisplay(unsigned char*)));

最佳答案

如果连接在单个线程中,则执行 emit 命令和插槽,然后程序继续到下一行,即 qDebug 行。所以可能不是信号慢,而是连接到它的插槽。

尝试删除所有使用该信号的连接,并一次添加一个以检查慢速连接。或者,更好的是,尝试使用分析器来检查此操作中的瓶颈(Linux 上的 valgrind、Windows 上的 glowcode 或类似软件)。

关于c++ - Qt emit 需要 30 毫秒,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020321/

相关文章:

c++ - Qt:将 protected QListWidget::itemChanged 信号连接到插槽

java - Clojure 数值性能 : What am I missing in my code?

c++ - QT qmake 小写我的自定义小部件名称

c++ - 创建无边界的 DirectShow 窗口

C++:我的右值在哪里?

java - "cancel query"在 SQL Developer 中如何工作

c# - 具有多个条件和组合的 LINQ 方法

c++ - Qt-GUI有几个 "pages",如何同步几个QWidgets的大小

c++ - 向第三方提供库时,C++ 包含文件是否存在安全漏洞?

c++ - Phong 着色器中不需要的透明度 - GLSL