2012-09-10 7 views
3

QT로 멀티 스레드 프로그램을 수행하고 있습니다.QtConcurrent의 스레드 ID 실행

이 코드를 사용하여 예상대로 작동하는지 확인합니다.

QFuture<void> t1 = QtConcurrent::run(thread_process1, (void *)this); 
QFuture<void> t2 = QtConcurrent::run(thread_process2, (void *)this); 

모두 thread_process1 2는 모두 스레드 ID를 보여, 그러나

qDebug()<<"thread id: "<<QString("%1").arg((int) QThread::currentThreadId(), 0, 16) ; 

만 한 줄입니다 : "ffffffffb6085b40"

내가 잘못 할 생각? QFutureWatcher는 도움이되지 않는 것 같습니다. 실행에 대한

답변

3

워드 프로세서

이 실행되는 별도의 스레드에서 작동 말한다. 스레드는 글로벌 QThreadPool에서 가져옵니다. 이 함수는 즉시 실행되지 않을 수도 있습니다. 함수는 스레드가 사용 가능할 때만 실행됩니다.

각 실행 호출이 다른 스레드에서 실행된다는 보장은 없습니다. 함수가 너무 빨리 실행되어 둘 다 동일한 스레드에 의해 순차적으로 처리 될 수 있습니다. 함수가 다른 스레드에 의해 집어 들었는지 보려면 thread_process_1에서 절전 호출을 시도하십시오.

+1

thx, 나는 두 기능 모두에서 (1) {qDebug() ....}을 시도해보십시오. –