Почему временная блокировка не вызывает исключение тайм-аута в C ++ 0x? - PullRequest
2 голосов
/ 02 мая 2010

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 всегда будет лучшим выбором?

1 Ответ

2 голосов
/ 02 мая 2010

Разве вы не можете просто проверить возвращаемое значение и выдать собственное исключение?

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

Кроме того, быстрый просмотр библиотек потоков и исключений в FCD не показывает никаких классов исключений, связанных со временем, поэтому в std:: нет типа для естественного выброса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...