4

QT でマルチスレッド プログラムを実行しています。

このコードを使用して、期待どおりに動作するかどうかを試します。

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

そして、thread_process1 と 2 の両方が 1 行だけです。

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

ただし、どちらもスレッド ID「ffffffffb6085b40」を示しています。

私はそれを間違っていますか?? QFutureWatcher は役に立たないようです。

4

1 に答える 1

4

実行のためのドキュメントは言う、

関数を別のスレッドで実行します。スレッドは、グローバル QThreadPool から取得されます。関数はすぐには実行されない場合があることに注意してください。この関数は、スレッドが使用可能な場合にのみ実行されます。

run の各呼び出しが異なるスレッドで実行されるという保証はありません。関数が非常に高速に実行される可能性があり、それらは両方とも同じスレッドによって順次処理されます。thread_process_1 にスリープ呼び出しを入れてみて、関数が別のスレッドによって取得されるかどうかを確認してください。

于 2012-09-10T02:36:41.007 に答える