Я должен отслеживать, как долго выполняется задание.Я работаю над Linux, но у меня нет доступа к самому ядру.
Моя задача просто занята циклами, пока процесс не будет выполняться в течение определенного времени.Тогда процесс должен выйти из этого цикла.
У меня была несколько рабочая версия, которая использовала clock_gettime()
из time.h
.Я сохранил время, начиная с Epoch, прямо перед тем, как занялся циклом, в переменной «start».Затем в каждой итерации цикла я снова проверял время с начала эпохи в другой переменной, называемой current.
О каждой итерации цикла я брал разницу между «текущим» и «стартовым».Если эта разница была больше или равна запрошенному времени выполнения, я вышел из цикла.
Проблема в том, что clock_gettime()
не влияет на приостановку задачи.Поэтому, если моя задача приостанавливается, то, как я сейчас это делаю, будет обрабатывать время, в течение которого задача приостановлена, как если бы она все еще выполнялась.
У кого-нибудь есть альтернатива clock_gettime()
, которая позволит таймеру как-то игнорировать время приостановки?Код моего текущего метода ниже.
//DOES NOT HANDLE TASK SUSPENSION
#include <time.h>
#define BILLION 1E9
//Set execution time to 2 seconds
double executionTime = 2;
//Variable used later to compute difference in time
double elapsedTime = -1;
struct timespec start;
struct timespec current;
//Get time before we busy-loop
clock_gettime(CLOCK_REALTIME, &start);
int i;
for (i = 0; i < 10000000000; i++)
{
//Get time on each busy-loop iteration
clock_gettime(CLOCK_REALTIME, ¤t);
elapsedTime = (current.tv_sec - start.tv_sec) + ((current.tv_nsec - start.tv_nsec) / BILLION);
//If we have been executing for the specified execution time, break.
if (elapsedTime >= executionTime)
{
break;
}
}