Il y a deux threads. Un fil pour OpenGL. La fonction paintGL() appelle update(). Sa performance est de 60 fps en raison des limites OpenGL. Lorsque paintGL se termine, le paintGL suivant démarre en 16 secondes. Le deuxième thread envoie et reçoit des données vers/depuis le serveur plus souvent que 60 ips (environ 500 fois par seconde). Le problème est alors: Après la fin du paintGL, le second thread s'arrête. sortie d'application ressemble à ceci:QOpenGLWidget bloque tous les threads
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 "
Pourquoi il y a Net :: process() "23: 01: 23,209" après Net :: process() "23: 01: 23,193" quand il appartient à la seconde fil?
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 ");
}
net ////////// ////////////////
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()));
}
Peut-être le système d'exploitation a-t-il préempté ce thread de travail pour un petit peu étant donné qu'il fonctionnait constamment? – peppe
@peppe, cela arrive toujours après la fonction paintGL() – user1277317
Que dit un profileur? – peppe