2017-01-20 2 views
0

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

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

+0

@peppe, cela arrive toujours après la fonction paintGL() – user1277317

+0

Que dit un profileur? – peppe

Répondre

0

Le problème est résolu avec l'aide de ybungalobill et son commentaire

la résolution de votre horloge système (c'est-à-dire qu'elle incrémente en sauts) Merci.