2017-01-20 3 views
0

Es gibt zwei Threads. Ein Thread für OpenGL. Die Funktion paintGL() ruft update() auf. Seine Leistung beträgt 60 fps wegen OpenGL-Beschränkungen. Wenn paintGL endet, beginnt das nächste paintGL in 16 Sek. Der zweite Thread sendet und empfängt Daten zum/vom Server häufiger als 60 fps (ungefähr 500 Mal pro Sekunde.) Und das Problem ist: Nachdem paintGL endet, stoppt der zweite Thread. Anwendungs ​​Ausgabe sieht wie folgt aus:QOpenGLWidget blockiert alle 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 " 

Warum es Net :: Prozess() "23: 01: 23,209" nach Net :: process() "23: 01: 23,193", wenn es gehört zum zweiten Faden?

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

Vielleicht das Betriebssystem vorweggenommen, dass Arbeiter Thread für ein bisschen gegeben, es lief ständig? – peppe

+0

@peppe, es passiert immer nach der Funktion paintGL() – user1277317

+0

Was sagt ein Profiler? – peppe

Antwort

0

Das Problem mit Hilfe von ybungalobill gelöst und sein Kommentar

die Auflösung Ihrer Systemuhr (dh es springt in Sprünge) Danke.

Verwandte Themen