문제

내 컨텐츠를 사전로드 할 수 있도록 응용 프로그램이 언제 유휴 상태인지 알고 싶습니다. PYQT에서 이벤트 나 유사한 구현이 있습니까?

(나사산으로도 할 수는 있지만 너무 복잡한 느낌이 듭니다.)

도움이 되었습니까?

해결책

최소한 두 가지 옵션이 있으며 스레드를 사용하거나 타이머를 사용할 수 있습니다. QT의 Qthread 클래스는 GUI 스레드를 포함하여 다른 스레드가 실행되지 않을 때만 프로세스하도록 설정할 수있는 우선 순위 속성을 제공합니다. 다른 옵션은 단일 샷 타이머입니다. 시간 초과가 0 밀리 초의 QTimer는 이벤트 큐 뒷면에 이벤트를 배치하여 이미 활성화되거나 예정된 모든 이벤트 및 동기 기능이 먼저 처리됩니다.

코드에서 두 가지 옵션은 다음과 같습니다.

// (1) use idle thread processing
MyQThreadSubclass idleThread;
idleThread.run(QThread::IdlePriority);

// (2) use QTimer::singleShot
QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));

싱글 샷 QTimer와 함께 가면 GUI를 차단할 수 있으므로 얼마나 많은 처리를하는지 조심하십시오. GUI가 지연되기 시작하지 않도록 덩어리로 나누고 싶을 것입니다.

// slot
void doIdleProcessingChunk() {
    /* ... main processing here ... */
    if (chunksRemain())
        QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));
}

분명히 위의 것은 C ++ 구문이지만 PYQT와 관련하여 대답하려면 단일 샷 타이머를 사용하십시오. 파이썬에서 글로벌 통역사 잠금 호출되는 구현이 Python 내에서 수행되는 경우 기본적으로 동시성의 대부분을 무의미하게 만들 것입니다.

그런 다음 Python 스레드 또는 QT 스레드를 사용하여 선택할 수 있습니다. 둘 다 다른 이유로 좋습니다.

다른 팁

살펴보십시오 QABSTRANTEVENTDISPATCHER. 하지만 ... 나는 여전히 스레드를 사용하는 것이 좋습니다. 원인:

  1. 휴대용이 될 것입니다
  2. 코드에서 실수를하면 이벤트 루프가 깨질 것입니다 -> 앱이 매달려 갑자기 종료 될 수 있습니다.
  3. 예압이 발생하는 동안 앱이 매달려 있습니다. 한 번에 하나씩 콘텐츠를 사전로드 할 수 없다면 이벤트는 처리되지 않습니다. 모두 매우 작으며 로딩은 몇 밀리 초 정도만 걸립니다.

내용이 준비되면 스레드를 사용하고 기본 스레드에 신호를 보내십시오. 훨씬 더 간단합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top