QOpenGLWidget阻塞所有线程

QOpenGLWidget blocks all threads

本文关键字:线程 QOpenGLWidget      更新时间:2023-10-16

有两个线程。OpenGL的一个线程。函数paintGL()调用update()。由于OpenGL的限制,它的性能为60 fps。当paintGL结束时,下一个paintGL在16秒内开始。第二个线程向/从服务器发送和接收数据的频率超过 60 fps(大约每秒 500 次)。问题是:paintGL结束后,第二个线程停止。应用程序输出如下所示:

Net::process() "23:01:23.193 "
Net::process() "23:01:23.193 "
paintGL start  "23:01:23.193 "
Net::process() "23:01:23.193 "
Net::process() "23:01:23.193 "
paintGL ok  "23:01:23.193 "
Net::process() "23:01:23.193 "
Net::process() "23:01:23.209 "
Net::process() "23:01:23.209 "

为什么在Net::p rocess() "23:01:23.209"之后有Net::p rocess() "23:01:23.193",当它属于第二个线程时?

void MyGL::paintGL()
{
qDebug()<<"paintGL start "<< QDateTime::currentDateTime().toString("hh:mm:ss.zzz ");
if(isInit==false)init();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
programImage.setUniformValue("mvp_matrix", matrixBase);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0);
update();
qDebug()<<"paintGL ok "<< QDateTime::currentDateTime().toString("hh:mm:ss.zzz ");
}

//////////网////////////////

MyNet::MyNet(QObject *parent) : QObject(parent)
{
QThread* thread = new QThread;
this->moveToThread(thread);
connect(thread, SIGNAL(started()), this, SLOT(process()));

connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
}
void MyNet::process()
{
//send and recieve data 
qDebug()<<"Net::process()"<< QDateTime::currentDateTime().toString("hh:mm:ss.zzz ");
QTimer::singleShot(0, this, SLOT(process()));
}

这个问题在ybungalobill和他的评论的帮助下得到解决

系统时钟的分辨率(即它以跳跃递增) 谢谢。