Для функции pthread_cond_timedwait нужно абсолютное время во время timespec структура.
Во сколько функция, которая я, предполагает для использования для получения абсолютного времени. Я видел большой пример в сети, и я нашел почти всю функцию времени используемой. (ftime, часы, gettimeofday, clock_gettime (со всем возможным CLOCK_...).
pthread_cond_timedwait использует абсолютное время. Будет это время ожидания, затронутое путем изменения времени машины? Также, если я получаю абсолютное время с одной из функции времени, если время изменения машины между получением и дополнением времени дельты это будет влиять на время ожидания? Существует ли возможность ожидать события с относительным временем вместо этого?
Я сам использовал clock_gettime
с CLOCK_REALTIME
. Это должно работать удовлетворительно и позволит вам легко создать абсолютный временной параметр для тайм-аута.
Действительно, есть вероятность, что машинное время будет продвигаться, пока вы выполняете настройку ожидания. В общем случае, если вы ждете достаточно малое количество времени, чтобы это имело значение, вы все равно не сможете приблизиться к запрошенному времени пробуждения, как вы надеетесь. Если запрошенное время уже прошло к моменту вызова timedwait, следует просто немедленно проснуться.
Solaris предоставляет pthread_cond_reltimedwait_np
, (np означает непортируемый), но я не знаю ни одной такой функции в Linux. Я бы предложил просто ждать абсолютного времени и, если нужно, самостоятельно реализовать относительное ожидание.
timespec
- это просто время в секундах ( time_t
) с дополнительными наносекундами. Вы можете использовать относительное время с cond_relative_timed_wait
.
Чтобы получить текущее системное время в форме time_t
, вызовите time (NULL);
из "time.h". Точнее было бы использовать
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
, который также вернет наносекунды.
Могут использоваться и другие функции, но конечный результат должен быть преобразован в количество секунд и количество наносекунд.