Цикл выполнения в течение фиксированного времени: счетчик возвращает различное число при каждом запуске - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь запустить цикл в течение определенного периода времени.В течение этого периода установите переменную счетчика и увеличьте ее на 1. Цель - увидеть, каково окончательное значение переменной счетчика во время прогона.Я надеюсь получить то же значение счетчика для того же периода работы.Похоже, это не тот случай.Когда я запускаю один и тот же цикл с одинаковой длительностью, переменная counter каждый раз возвращает разное число.Я заимствую этот код у isayme .

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main(void)
{
   time_t endwait;
   time_t start = time(NULL);
   time_t seconds = 1; // end loop after this time has elapsed
   endwait = start + seconds;
   int counter =0;
   while (1){
        if (start < endwait){
           counter=counter+1;
           start = time(NULL);
        }
        else
           break;
   }
printf("Counter Value: %d", counter);
return 0;
}

выход при другом запуске:

Значение счетчика: 99742750

Значение счетчика: 30134682

Значение счетчика: 30596672

Итак, мой вопрос:

  1. Как я могу получить одну и ту же переменную счетчика для фиксированного времени цикла?

  2. Я пытался установить переменную секунд меньше 1, но это дает 0. Итак, как я могу установить это время в долях?

Заранее спасибо.

1 Ответ

2 голосов
/ 24 сентября 2019

В системе POSIX функция time() возвращает время, измеренное в секундах:

Функция time() должна возвращать значение времени в секундах с начала эпохи.

Windows похожа :

Возвращает время в секундах, прошедшее с полуночи, 1 января 1970 года или -1 в случаеошибка.

Первый вызов time() в вашем процессе происходит практически в произвольный момент в течение в одну секунду, а затем ваш цикл выполняется до возвращаемого значения из * 1022.* Изменения.

Таким образом, ваш цикл будет работать в течение некоторого случайного промежутка времени от очень маленькой доли секунды до полной секунды.Самый первый вызов time() в вашем цикле может вернуть значение, которое приводит к завершению вашего цикла, или ваш цикл может работать около полной секунды.Или промежуток времени между ними.

Это предполагает, что на вашем компьютере больше ничего не работает.Это может и также изменит ваши результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...