В предисловии, я нахожусь в системе Unix (linux), используя gcc.Код запуска для x времени
Я застрял в том, как точно реализовать способ запуска части кода в течение определенного времени.
Вот пример того, что я работаю с:
struct timeb start, check;
int64_t duration = 10000;
int64_t elapsed = 0;
ftime(&start);
while (elapsed < duration) {
// do a set of tasks
ftime(&check);
elapsed += ((check.time - start.time) * 1000) + (check.millitm - start.millitm);
}
Я думал, это было бы вели к 10000ms или 10 секунд, но этого не произошло, почти мгновенно. Я основывал это на других вопросах, таких как How to get the time elapsed in C in milliseconds? (Windows). Но потом я подумал, что если при первом вызове ftime структура будет time = 1, millitm = 999
, а при втором вызове time = 2, millitm = 01
это будет вычисление прошедшего времени как 1002 миллисекунды. Есть что-то, чего я не хватает?
Также предложения в различных вопросах stackoverflow, ftime() и gettimeofday() перечислены как устаревшие или устаревшие.
Я считаю, что могу преобразовать время начала в миллисекунды, а время проверки - в millseconds, а затем вычесть начало из проверки. Но миллисекунды с эпохи требуют 42 бит, и я стараюсь держать все в цикле максимально эффективным.
Какой подход я могу принять к этому?
Вы можете организовать отправку сигнала в ваш процесс по истечении определенного времени через 'timer_create()'. – EOF
Я бы ожидал 'elapsed = ...', а не' elapsed + = ..' – chux
@chux ok yes Я не хотел включать это. Моя проблема связана с неправильным определением изменения во времени с помощью этого примера. –