동일한 신호에 연결된 두 개의 Qt 슬롯이 있습니다.Qt- 스레드를 명시 적으로 구현하지 않고 두 개의 슬롯을 동시에 실행하는 방법
명시 적으로 Qt 멀티 스레딩을 사용하지 않고 병렬로 실행해야합니다.
Qt가 암시 적으로 해결할 해결책을 제공했는지 찾아 보았지만 찾지 못했습니다.
Qt에서 수행 할 수있는 해결책이 있습니까?
동일한 신호에 연결된 두 개의 Qt 슬롯이 있습니다.Qt- 스레드를 명시 적으로 구현하지 않고 두 개의 슬롯을 동시에 실행하는 방법
명시 적으로 Qt 멀티 스레딩을 사용하지 않고 병렬로 실행해야합니다.
Qt가 암시 적으로 해결할 해결책을 제공했는지 찾아 보았지만 찾지 못했습니다.
Qt에서 수행 할 수있는 해결책이 있습니까?
당신은 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
변형 : 두 개의 슬롯과'slot1'의 시작 부분에'slot2'의'QtConcurrent :: run' 호출이 하나 있습니다. 그리고 나서'slot1'의 정상적인 작업을하고'slot1'의 끝에서'slot2'의 미래에'waitForFinished'를 호출합니다. – MSalters
아니요. 병렬 = 멀티 스레딩. 멀티 스레딩이 없다면 병렬 처리를 할 수 없습니다. – Hayt
불투명 한 것으로 결론 지었다. 병렬로 실행하지 않고 병렬로 실행 하시겠습니까? 게다가, _with_ threads를 사용한다고해서 실제로 병렬로 실행되는 것을 보장 할 수는 없습니다. 단일 스레드 CPU를 사용 중이거나 OS가 프로그램에 단일 코어 만 지정하면 어떻게 될까요? – MSalters
@MSalters : 완전한 답을 쓸 수 있습니다. 나는 그것을 체크하고 업 보트 (upvote) 할 것입니다. 이 문제는 많은 Qt 사용자가 직면 할 수 있습니다. – ProEns08