2014-12-17 4 views
1

주어진 루트 디렉토리에서 지정된 확장자를 가진 파일을 재귀 적으로 찾고 내 GUI에 현재있는 파일 수를 표시하려고합니다. 이러한 종류의 처리가 길어질 수 있으므로 GUI가 차단 될 수 있습니다. 처리가 끝날 때까지 기다렸다가 파일 수를 얻을 수는 있지만 Qt (PyQt)를 배우기 때문에 이것을 교육으로 봅니다.진보 된 간단한 Qt 스레딩 메커니즘?

Qt doc : When to Use Alternatives to Threads을 읽었으므로 저에게는 적합하지 않다고 생각합니다. Choosing an Appropriate Approach, 나는 내 솔루션이 첫 번째 생각 : : 그런 다음

본인은 실행

동안 업데이트를 진행 로 선택적으로,

다른 스레드에서 새로운 선형 함수를 실행 그러나이 경우에는 3 가지 선택 사항이 있습니다 :

Qt는 다른 해결책을 제공합니다 :

  • 함수를 QThread :: run()의 재 구현에 배치하고 QThread를 시작합니다. 진행 상황을 업데이트하기 위해 신호를 내 보냅니다. 또는
  • 함수를 QRunnable :: run()의 다시 구현에 배치하고 QRunnable을 QThreadPool에 추가하십시오. 진행 상황을 업데이트하려면 스레드 안전 변수 에 작성하십시오. 또는
  • QtConcurrent :: run()을 사용하여 함수를 실행하십시오. 진행 상황을 업데이트하려면 스레드 안전 변수에 씁니다.

가장 적합한 것을 선택하는 방법을 알려주시겠습니까? 몇 가지 "솔루션"을 읽었지만 왜 다른 방법 대신 하나의 방법을 사용해야하는지 이해하고 싶습니다.

또한 파일을 찾고 있기 때문에 많은 파일이 검색 기준과 일치하는 디렉토리가있을 수 있습니다. 따라서 많은 중단을 의미합니다. 이것에 관해 명심할 특별한 것이 있습니까?

감사합니다.

+1

나는 QThread를 사용했을 때만 경험을 쌓았으며 그다지 많이 사용하지 못했습니다. 그러나, 내가 알고있는 것 (그리고 도표에 기초한 것)으로부터 다른 옵션들은 신호를받을 수 없다. 그래서, 예를 들어, 사용자가 시작한 취소를 어떻게 처리할지 모르겠습니다. –

+0

그것은 흥미로운 관점입니다. 나는 신호에 관한 부분을 주목하지 않았다. 그것은 많은 도움이됩니다!나는 그동안'QThread'를 살펴 봤는데 Qt doc이 이것과 관련하여 완벽하지 않다는 것을 알았습니다 : https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use -qthreads-the-full-explanation/ – Plouff

+0

QThreads를 기존 프로젝트에 추가해야하므로이 내용을 읽어야합니다. 음, 그들은 거기에 있지만 완전히 활용하지 못했습니다. 기억해야 할 중요한 규칙 중 하나는 신호와 슬롯이 작동하는 주 스레드에서 위젯을 조작해야하므로 계정을 고려해야합니다. 또한 Qt4의 두 버전 간에는 QThread 구현의 차이점이 있습니다. 나는 * 그것이 4.7과 4.8이라고 생각한다. 그래서 그것도 조사해야한다. –

답변

1

내가 아는 바에 따르면 (더 많은 사람들이 소리를지를 수 있기를 바랍니다.) QThread는 신호 상호 작용을 지원합니다. 예를 들어 신호로 동시 기능을 중지 할 수 있습니다. 만약 당신이 다른 옵션들로 그것을 어떻게 할 것인지 확신 할 수 없다.

주의 사항 : 위젯은 모두 주 스레드에서 살아야하지만 신호는 & 슬롯을 통해 다른 다른 스레드와 통신 할 수 있습니다.

괜찮은 글 머리 기호가있는 주제에 대한 또 다른 빠른 주제. https://qt-project.org/forums/viewthread/50165/

Qt에 오신 것을 환영합니다!