2

C++0x では、指定された時間に達するまでミューテックスをロックし、ミューテックスがロックされているかどうかを示すブール値を返すことができます。

template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, 
                    Duration>& abs_time);

状況によっては、タイムアウトのためにロックが失敗するという例外的な状況を考えます。この場合、例外をより適切に設定する必要があります。

違いを生むために、関数 lock_until を使用して、ロックする前に時間に達したときにタイムアウト例外を取得できます。

template <class Clock, class Duration>
void lock_until(const chrono::time_point<Clock, 
                Duration>& abs_time);

一部のコンテキストでは、lock_until の方が適切であると思いますか? はいの場合、どのものですか?いいえの場合、なぜ try_lock_until が常により良い選択になるのでしょうか?

4

1 に答える 1

2

戻り値を確認して独自の例外をスローすることはできませんか?

if ( ! my_lock.try_lock_until( my_start_time ) ) {
    throw realtime_error( "Couldn't start in time!" );
}

std::また、FCD のスレッド ライブラリと例外ライブラリをざっと見ても、時間関連の例外クラスは表示されないためlock_until、自然にスローされる型はありません。

于 2010-05-02T06:05:44.367 に答える