Почему и TV sec, и tv usec важны для определения продолжительности таймера?

на странице руководства getitimer (2) утверждается, что

оба tv_sec и tv_usec значительные в определении длительность таймера

Он не говорит, Почему это так. Во многих примерах, с которыми я столкнулся, tv_sec просто установлен в 0, в то время как tv_usec получает некоторое разумное значение или наоборот. Эти таймеры отсчитывают одновременно или общее время обратного отсчета tv_sec + tv_usec? Должен ли я использовать оба? Ни?

5 ответов


на man page документы timeval структура:

struct timeval {
    long tv_sec;                /* seconds */
    long tv_usec;               /* microseconds */
};

если вы хотите подождать целое количество секунд, вы просто установите tv_sec. Если вы хотите подождать часть секунды, вы должны установить tv_usec. Если вы хотите подождать 4,5 секунды, вы установите и из них до соответствующих значений (4 и 500000 соответственно)


структура описана, хотя:

struct timeval {
    long tv_sec;                /* seconds */
    long tv_usec;               /* microseconds */
};

как вы видите, общее время составляет tv_sec + (1.0/1000000) * tv_usec секунд. Вот почему, когда вам нужно раз в секунду, вы устанавливаете tv_usec, когда вам нужно раз в течение 1сек, вы устанавливаете оба (но обычно в конечном итоге устанавливаете только tv_sec)


да, общее время-это сумма обоих. параметры tv_sec-это секунды. И tv_usec-это микросекунды дальше этого.


long int tv_usec это остальная часть прошедшего времени (доля во-вторых), представленное как количество микросекунд. Всегда меньше больше миллиона.

tv_sec будет обрабатывать полные секунды, в то время как tv_usec обрабатывает микросекунды.

микросекунды сбросятся до 0, когда он достигнет своего максимума (1 миллион) и увеличивает секунды так же, как обычный секундомер.


У меня была утечка памяти из-за того, что я не tv_usec. Comuter принимает сумму этих двух значений, и если вы не инициализируете одно из них, значение суммы может быть случайным.