Во сколько функция я должен использовать с pthread_cond_timedwait?

Для функции pthread_cond_timedwait нужно абсолютное время во время timespec структура.

Во сколько функция, которая я, предполагает для использования для получения абсолютного времени. Я видел большой пример в сети, и я нашел почти всю функцию времени используемой. (ftime, часы, gettimeofday, clock_gettime (со всем возможным CLOCK_...).

pthread_cond_timedwait использует абсолютное время. Будет это время ожидания, затронутое путем изменения времени машины? Также, если я получаю абсолютное время с одной из функции времени, если время изменения машины между получением и дополнением времени дельты это будет влиять на время ожидания? Существует ли возможность ожидать события с относительным временем вместо этого?

11
задан Vincent 11 June 2010 в 13:10
поделиться

2 ответа

Я сам использовал clock_gettime с CLOCK_REALTIME. Это должно работать удовлетворительно и позволит вам легко создать абсолютный временной параметр для тайм-аута.

Действительно, есть вероятность, что машинное время будет продвигаться, пока вы выполняете настройку ожидания. В общем случае, если вы ждете достаточно малое количество времени, чтобы это имело значение, вы все равно не сможете приблизиться к запрошенному времени пробуждения, как вы надеетесь. Если запрошенное время уже прошло к моменту вызова timedwait, следует просто немедленно проснуться.

Solaris предоставляет pthread_cond_reltimedwait_np, (np означает непортируемый), но я не знаю ни одной такой функции в Linux. Я бы предложил просто ждать абсолютного времени и, если нужно, самостоятельно реализовать относительное ожидание.

2
ответ дан 3 December 2019 в 07:36
поделиться

timespec - это просто время в секундах ( time_t ) с дополнительными наносекундами. Вы можете использовать относительное время с cond_relative_timed_wait .

Чтобы получить текущее системное время в форме time_t , вызовите time (NULL); из "time.h". Точнее было бы использовать

timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);

, который также вернет наносекунды.

Могут использоваться и другие функции, но конечный результат должен быть преобразован в количество секунд и количество наносекунд.

-1
ответ дан 3 December 2019 в 07:36
поделиться