문제를 재현하는 간단한 프로그램을 만들었습니다. 전화를 잠 그거나 내 안드로이드 전화의 다른 응용 프로그램으로 전환하면 작업자 스레드가 인쇄를 계속하지만 이벤트 루프는을 중지합니다. 내 응용 프로그램으로 다시 전환하면 이벤트 루프가 다시 시작됩니다.Qt 5.3 또는 Qt 5.4 (Qt 5.2 제외)로 컴파일했을 때 전화가 잠길 때 QGuiApplication이 이벤트 루프를 중지합니다.
QGuiApplication을 QCoreApplication으로 바꾸면 문제가 사라집니다. Qt 5.3 대신 Qt 5.2로 컴파일하면 문제가 사라집니다. Qt 5.4는 Qt 5.3과 동일한 문제가 있습니다.
static int count = 0;
void workerThread()
{
while (1) {
qDebug("Worker thread %d", count++);
sleep(1);
}
}
void MyObject::step()
{
qDebug("Event loop %d", count++);
}
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);
MyObject w;
QTimer timer;
QObject::connect(&timer, SIGNAL(timeout()), &w, SLOT(step()));
timer.start(1000);
QtConcurrent::run(workerThread);
return a.exec();
}
어떻게 응용 프로그램이 포커스를 잃었을 때 QGuiApplication이 이벤트 루프를 멈추게합니까? 포 그라운드가 아닌 경우에도 내 응용 프로그램에서 이벤트를 처리해야합니다.
당신은 – lpapp
sashoalm, 나는 당신을 위해 버그 보고서를 생성? 로그 캣의 출력을 보여 주지만, 수 개발자를위한 OS 및 전화에 대한 자세한 내용을 제공하십시오. https://bugreports.qt-project.org/browse/QTBUG-43434 – lpapp
아마 응용 프로그램 상태 (변경된 신호 등)도 확인할 수 있습니다. – lpapp