Comunidad Empresarial Dinamiza

 
 
  • No hay categorías

 
No te pierdas...
 

 
Publicado 02/08/2019 por admin en
 
 

qt 멀티스레드 예제

크로스 플랫폼 스레드 지원은 2000년에 출시된 Qt 2.2에서 도입되었으며, 마침내 C++11에 의해 표준화되기 전의 연령대입니다. 이 지원을 통해 개발자는 Qt를 사용하여 Windows, Linux, OS X, QNX, iO S, Android 등 많은 운영 체제에서 기본적으로 실행되는 수많은 다중 스레드 응용 프로그램을 성공적으로 빌드할 수 있었습니다. 이 템플릿을 사용하여 이전 예제에서 LogService를 재정의합니다: 이 솔루션에는 한 가지 이점이 있습니다: QThreadPool::clear() 응용 프로그램을 신속하게 종료해야 하는 경우와 같은 모든 보류 중인 요청을 즉시 취소할 수 있습니다. 그러나 스레드 선호도에 연결된 중요한 단점도 있습니다: logEventCore 함수는 호출에서 호출까지 다른 스레드에서 실행될 가능성이 높습니다. QT에는 스레드 선호도가 필요한 클래스가 있습니다: QTimer, QTcpSocket 및 아마도 다른 클래스가 있습니다. Qt의 스레딩 시설은 4가지 주요 버전으로 확장 및 개선되었습니다. 수년에 걸쳐 Qt의 진화에 따라 개발자가 이러한 기능을 최대한 사용할 수 있도록 다양한 «디자인 패턴»이 등장했으며, 멀티스레드 프로그래밍의 수많은 함정에 빠지지 않습니다. 실제적인 예: 전용 스레드에서 작동 하는 TcpConnection 연결 클래스를 살펴보겠습니다.이 클래스는 스레드 안전 메서드를 내보내려면: bool isConnected(). 내부적으로 클래스는 소켓 이벤트를 수신 대기합니다: 내부 부울 플래그를 유지하기 위해 연결 및 연결이 끊어졌습니다: 이 시스템은 강력하지만 복잡합니다. 더 간단하게 하기 위해 Qt는 작업자 모델을 선호합니다. 실제 가공에서 스레딩 배관을 분할합니다.

다음은 다중 스레드 응용 프로그램에서 GUI가 자체 스레드에서 실행되고 하나 이상의 다른 스레드에서 추가 처리가 수행됩니다. 따라서 집중처리 중에도 응답성이 있는 GUI가 있는 응용 프로그램이 생성됩니다. 단일 프로세서에서 실행될 때 다중 스레드 응용 프로그램은 여러 스레드가 있는 오버헤드로 인해 단일 스레드와 동일한 응용 프로그램보다 느리게 실행될 수 있습니다. 그러나 점점 더 보편화되고 있는 멀티프로세서 시스템에서다중스레드 응용 프로그램은 여러 프로세서에서 동시에 여러 스레드를 실행할 수 있어 전반적인 성능이 향상됩니다. 멀티 스레딩은 주제에 전념 많은 책과 함께 큰 주제입니다, 예를 들어, 스레드 프라이머: 빌 루이스와 다니엘 J. 버그에 의해 멀티 스레드 프로그래밍 가이드 (프렌티스 홀, 1995) 및 그레고리에 의해 멀티 스레드, 병렬 및 분산 프로그래밍 앤드류스 (애디슨 웨슬리, 2000). 여기서는 다중 스레드 프로그래밍의 기본 을 이미 이해하고 있다고 가정하므로 스레딩 자체가 아닌 다중 스레드 Qt 응용 프로그램을 개발하는 방법을 설명하는 데 중점을 둡니다. 사용자가 종료를 클릭하거나 창을 닫으면 실행 중인 스레드가 중지되고 QCloseEvent::accept()라고 부르기 전에 실행 중인 스레드가 완료될 때까지 기다립니다(QThread::wait()).

이렇게 하면 이 예제에서는 실제로 중요하지 는 않지만 응용 프로그램이 깨끗한 상태로 종료됩니다. 또한 QThread::run() 메서드를 재정의하여 이벤트 루프 없이 QThread를 실행할 수 있으며, 현재 수행 중인 작업을 아는 한 완벽하게 괜찮습니다. 예를 들어, 이러한 경우 메서드 종료()가 작동할 것으로 기대하지 마십시오. 위에서 설명한 것처럼 Qt는 스레드 응용 프로그램을 개발하기 위한 다양한 솔루션을 제공합니다. 지정된 응용 프로그램에 적합한 솔루션은 새 스레드의 목적과 스레드의 수명에 따라 달라집니다. 다음은 Qt의 스레딩 기술을 비교한 다음 몇 가지 예시 사용 사례에 대한 권장 솔루션입니다. Mandelbrot 예제에서는 Qt를 사용하여 다중 스레드 프로그래밍을 보여 줍니다. 주 스레드의 이벤트 루프를 차단하지 않고 작업자 스레드를 사용하여 무거운 계산을 수행하는 방법을 보여 주며, 다중 스레드 개발에 대한 또 다른 접근 방식은 Qt Concurrent 프레임워크에서 사용할 수 있습니다. 뮤텍스/잠금/대기 조건의 사용을 방지하고 CPU 코어 간의 처리 분산을 촉진하는 상위 수준의 API입니다.


admin