QOpenGLWidget阻止所有线程

时间:2017-01-20 20:31:22

标签: c++ multithreading qt

有两个主题。 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 :: process()“23:01:23.193”属于第二个帖子时,为什么Net :: process()“23:01:23.209”?

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()));
}

1 个答案:

答案 0 :(得分:0)

在ybungalobill和他的评论

的帮助下解决了这个问题
  

系统时钟的分辨率(即跳转增量)   感谢。