我正在努力提高我的项目的性能,所以我想弄清楚哪个操作需要时间。
我注意到我的 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/