2012-03-07 16 views
-2

スレッドをロックするときにQMutexLockerが動作しません。QMutexLockerがロックされていないQMutex

  • 回答:

    void foo() { 
        // QMutexLocker(&mutex); // wrong, it will not just lock and unlock 
        QMutexLocker locker(&mutex); // right, it will lock until the 'locker' scope ends 
        ... 
    } 
    
+0

あなたはそれについて質問がありますか?あなたはすでにそれを理解しているようです。 –

答えて

1

オフもちろん、これは間違っている:

QMutexLocker(&mutex); 

それはロック一時的なミューテックスを作成し、文の終わりにロックを解除するので。ここで

QMutexLocker locker(&mutex); 

はあなたがミューテックスをロックし、それがスコープの外に出たとき、それをアンロックロッカーという名前QMutexLocker型のオブジェクトを、作成しています。

+3

最初はエラーではありませんが、意図したものではありませんが、完全に有効です。一時的なロッカーが作成され、mutexをロックします。問題は、ステートメントの最後にロッカーがすぐに再び破棄され、mutexがロックされていないことです。 –

+0

@FrankOsterfeldありがとうございました。私は何かを試しました。(このPCにはqtがインストールされていないので)失敗したので、上記をコンパイルできないと思いました。 –

関連する問題