qtconcurrent 예제

예를 들어 별도의 스레드에서 QByteArray::split(const member function)을 호출하는 작업은 다음과 같이 수행됩니다. 예: 이 예제에서는 시퀀스의 모든 항목에 배율 함수를 적용하는 방법을 보여 주며, 세마포의 비컴퓨팅 예제는 식당에서 식사하는 것입니다. 세마포는 레스토랑의 의자 수와 함께 초기화됩니다. 사람들이 도착하면, 그들은 좌석을 원한다. 좌석이 채워질 때 사용 가능()이 감소됩니다. 사람들이 떠날 때 사용 가능한()가 증가하여 더 많은 사람들이 입장할 수 있습니다. 10인의 정당이 의석을 차지하고 싶지만 10석만 기다린다면 10명이 앉을 수 있지만, 4인 의석이 5석으로 자리를 비우면 10명이 더 기다려야 한다. 스레드가 지정될 이름을 선택하려면(예: Linux의 ps -L 명령으로 식별됨) 스레드를 시작하기 전에 setObjectName()을 호출할 수 있습니다. setObjectName()을 호출하지 않으면 스레드에 지정된 이름은 스레드 개체의 런타임 형식의 클래스 이름입니다(예: 만델브로트 예제의 경우 QThread 하위 클래스의 이름인 « RenderThread »). 현재 Windows에서 릴리스 빌드를 사용할 수 없습니다. QMutexLocker는 또한 QMutexLocker가 작동하는 뮤텍스를 반환하는 뮤텍스() 멤버 함수를 제공합니다. 이 기능은 QWaitCondition::wait()와 같은 뮤텍스에 액세스해야 하는 코드에 유용합니다. 예를 들어 이 복잡한 함수는 함수를 입력할 때 QMutex를 잠그고 모든 종료 지점에서 뮤텍스의 잠금을 해제합니다.

예를 들어 QtConcurrent::run()에서 반환된 미래는 취소할 수 없습니다. 그러나 QtConcurrent에 의해 반환 된 미래 ::mappedReduced () 할 수 있습니다. 이 예제 함수는 개발될 수록 더 복잡해지므로 오류가 발생할 가능성이 높아집니다. 함수에 인수를 전달하는 것은 함수 이름 바로 직후QtConcurrent::run() 호출에 인수를 추가하여 수행됩니다. 예: 이 예제에서는 실행 함수가 반환된 후 스레드가 종료됩니다. exec()를 호출하지 않는 한 스레드에서 실행되는 이벤트 루프는 없습니다. QFuture는 또한 런닝 계산과 상호 작용하는 방법을 제공합니다. 예를 들어 cancel() 함수를 사용하면 계산을 취소할 수 있습니다. 계산을 일시 중지하려면 setPaused() 함수 또는 pause(), resume() 또는 togglePaused() 편의 함수 중 하나를 사용합니다.

모든 비동기 계산을 취소하거나 일시 중지할 수 있는 것은 아닙니다. 예를 들어 QtConcurrent::run()에서 반환된 미래는 취소할 수 없습니다. 그러나 QtConcurrent에 의해 반환 된 미래 ::mappedReduced () 할 수 있습니다. 다음은 QReadLocker를 사용하여 읽기 읽기 읽기 잠금 잠금을 해제하는 예제입니다: 예를 들어, 두 줄로 사용자에게 메시지를 인쇄하는 방법이 있다고 가정합니다: QtConcurrent::mapped() 기대와 일치하며 전체 예제는 다음과 같습니다. 그것은 여전히 매우 간단한 예입니다. 더 복잡하게 만들어 봅시다. 위의 예는 매우 이상적인 경우입니다. 그리고 물론, 실제 문제는 일반적으로 그렇게 간단하지 않습니다. 요구 사항을 변경해 보겠습니다 – 이미지 캐싱을 지원합니다.