2016-08-31 1 views
0

동일한 신호에 연결된 두 개의 Qt 슬롯이 있습니다.Qt- 스레드를 명시 적으로 구현하지 않고 두 개의 슬롯을 동시에 실행하는 방법

명시 적으로 Qt 멀티 스레딩을 사용하지 않고 병렬로 실행해야합니다.

Qt가 암시 적으로 해결할 해결책을 제공했는지 찾아 보았지만 찾지 못했습니다.

Qt에서 수행 할 수있는 해결책이 있습니까?

+0

아니요. 병렬 = 멀티 스레딩. 멀티 스레딩이 없다면 병렬 처리를 할 수 없습니다. – Hayt

+0

불투명 한 것으로 결론 지었다. 병렬로 실행하지 않고 병렬로 실행 하시겠습니까? 게다가, _with_ threads를 사용한다고해서 실제로 병렬로 실행되는 것을 보장 할 수는 없습니다. 단일 스레드 CPU를 사용 중이거나 OS가 프로그램에 단일 코어 만 지정하면 어떻게 될까요? – MSalters

+0

@MSalters : 완전한 답을 쓸 수 있습니다. 나는 그것을 체크하고 업 보트 (upvote) 할 것입니다. 이 문제는 많은 Qt 사용자가 직면 할 수 있습니다. – ProEns08

답변

4

당신은 slot()에 신호를 연결하고 모든 작업 당신은 동시 모듈을 사용할 필요가

#include <QtConcurrent> 
#include <QFuture> 
... 
void MyClass::slot() 
{ 
    QFuture <void> future1, future2; 
    future1 = QtConcurrent::run(this,&MyClass::slot1); 
    future2 = QtConcurrent::run(this,&MyClass::slot2); 
    future1.waitForFinished(); 
    future2.waitForFinished(); 
} 

을 할 QtConurrent를 사용해야합니다. .pro 파일에 다음을 추가하십시오.

QT += concurrent 
+1

변형 : 두 개의 슬롯과'slot1'의 시작 부분에'slot2'의'QtConcurrent :: run' 호출이 하나 있습니다. 그리고 나서'slot1'의 정상적인 작업을하고'slot1'의 끝에서'slot2'의 미래에'waitForFinished'를 호출합니다. – MSalters

관련 문제