Почему и 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 принимает сумму этих двух значений, и если вы не инициализируете одно из них, значение суммы может быть случайным.