2014-12-13 9 views
7

문제를 재현하는 간단한 프로그램을 만들었습니다. 전화를 잠 그거나 내 안드로이드 전화의 다른 응용 프로그램으로 전환하면 작업자 스레드가 인쇄를 계속하지만 이벤트 루프는을 중지합니다. 내 응용 프로그램으로 다시 전환하면 이벤트 루프가 다시 시작됩니다.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이 이벤트 루프를 멈추게합니까? 포 그라운드가 아닌 경우에도 내 응용 프로그램에서 이벤트를 처리해야합니다.

+0

당신은 – lpapp

+2

sashoalm, 나는 당신을 위해 버그 보고서를 생성? 로그 캣의 출력을 보여 주지만, 수 개발자를위한 OS 및 전화에 대한 자세한 내용을 제공하십시오. https://bugreports.qt-project.org/browse/QTBUG-43434 – lpapp

+0

아마 응용 프로그램 상태 (변경된 신호 등)도 확인할 수 있습니다. – lpapp

답변

3

내 의견에서 언급했듯이 거부 당할 위험이있는 버그 보고서를 만들었지 만, 적어도 공식 유지 관리자의 의견을 얻을 수 있습니다. 메인테이너 주장으로, 당신은 활동이 아닌 서비스을 만들기에 집중해야하기 때문에, 충분히 공정하다

QGuiApplication "stops" when locking the phone or switching application.

그것은 지금 철회되었습니다. 그러나 아직까지는 전용 Qt API가 없습니다.

활동에서이 아이디어가 좋지 않은 이유는 단순히 응용 프로그램이 "백그라운드"로 들어갈 때 즉시 죽을 수도 있기 때문입니다. 또한 사용자가 예상 할 수있는 것보다 빨리 배터리를 소모 할 수 있습니다 to. 즉, 이것은 고정 된 것으로 보이는 관리자가 5.2의 기능이 아니라 버그로 간주됩니다.

오늘부터 서비스를 만드는 방법에 대한 도움말을 찾을 수 있습니다 :

Build background service with Qt on android

+0

나는 당신이 의미하는 것을 이해합니다. 나는 쉬운 대답을하고 있었고 모자를 사러 가기 만했다. : D +1. – karlphillip

+0

@karlphillip : 내 모자는 벗었 니? ;-) 당신이 겨울 모자를 의미한다면, 내 모든 것이 당신 것입니다. 나는 그 기능을 해제했다. – lpapp

+0

내 "불가사의하게 사라지는"설명은 이미 언급했지만 버그는 아니지만 새로운 기능입니다. 너는 너무 열심히 노력하고있어. – dtech