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()));
}
Vielleicht das Betriebssystem vorweggenommen, dass Arbeiter Thread für ein bisschen gegeben, es lief ständig? – peppe
@peppe, es passiert immer nach der Funktion paintGL() – user1277317
Was sagt ein Profiler? – peppe