Я пытаюсь выполнить цикл в течение точного времени, указанного executionTime
.Я использую ctime
, чтобы получить это время, и мне нужно, чтобы оно было в пределах нескольких миллисекунд точности (что, я считаю, так).Как только этот цикл выполняется в течение указанного времени выполнения, он должен прерваться.
Моя проблема связана с временем выполнения 0,5, результат печати равен 1. После дальнейшего тестирования оказывается, что моя программа округляет время выполнения до ближайшего целого числа.Таким образом, для 4.5 executionTime
время печати составляет 5.0000000.Мой код ниже.Я не уверен, откуда эта ошибка.
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
float executionTime = 4.5;
int i;
float timeDifference = -1;
time_t t1;
time_t t2;
t1 = time(0);
for (i = 0; i < 1000000000; i++)
{
t2 = time(0);
timeDifference = difftime(t2, t1);
if (timeDifference >= executionTime)
{
break;
}
}
printf("time difference is: %f\n", timeDifference);
return 0;
}
NEW VERSION пытается использовать clock_gettime.В этой версии проблема не прерывается, когда по циклу по какой-то причине достигается время выполнения.
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define BILLION 1E9
int main()
{
float executionTime = 4.5;
int i;
float elapsedTime = -1;
struct timespec start;
struct timespec stop;
//Get starting time
clock_gettime(CLOCK_REALTIME, &start);
for (i = 0; i < 1000000000; i++)
{
//Get current time
clock_gettime(CLOCK_REALTIME, &stop);
elapsedTime = ((stop.tv_sec - start.tv_sec) + (stop.tv_nsec - start.tv_nsec)) / BILLION;
if (elapsedTime >= executionTime)
{
break;
}
}
printf("time difference is: %f\n", elapsedTime);
return 0;
}