如何在Allegro 5中以秒为单位计算时间

时间:2019-05-18 10:21:14

标签: c allegro5

我在计算Allegro5中的时间时遇到问题。 我必须去学校做项目,在这里我将展示shellsort,它如何工作以及如何快速排序数组,并且有问题

我不知道如何以秒为单位计算时间,我做了一些类似的代码,但无法正常工作

ALLEGRO_TIMER *shellTimer = al_create_timer(1.0);
al_start_timer(shellTimer);

// ALGORYTM SHELLA
while (distance) {
    shellCounter++;
    for (int j = NUMBER_OF_ELEMENTS - distance - 1; j >= 0; j--) {
        pos = array[j];
        i = j + distance;
        shellCounter += 2;
        while ((i < NUMBER_OF_ELEMENTS) && (pos > array[i])) {
            array[i - distance] = array[i];
            i += distance;
            counter += 2;
        }
        array[i - distance] = pos;
        shellCounter++;
    }
    distance /= 3;
    shellCounter++;
}

shellTime = al_get_timer_count(shellTimer);
al_stop_timer(shellTimer);

当我执行它时它什么也不做,shellTime变量是int64_t

2 个答案:

答案 0 :(得分:0)

您可以使用time.h中找到的时间函数来获取自epoch(1970年1月1日)以来的秒数。可以使用time()而不是al_get_timer将返回值存储在time_t变量中。然后,您可以使用difftime来计算差值,它会返回一个双精度值。

尝试此代码。

time_t start;
time_t end;
time(&start);

// ALGORYTM SHELLA
while (distance) {
    shellCounter++;
    for (int j = NUMBER_OF_ELEMENTS - distance - 1; j >= 0; j--) {
        pos = array[j];
        i = j + distance;
        shellCounter += 2;
        while ((i < NUMBER_OF_ELEMENTS) && (pos > array[i])) {
            array[i - distance] = array[i];
            i += distance;
            counter += 2;
        }
        array[i - distance] = pos;
        shellCounter++;
    }
    distance /= 3;
    shellCounter++;
}

time(&end);
double elapsed = difftime(end,start); //elapsed time in seconds

是的,这是可移植的C标准解决方案。

答案 1 :(得分:0)

您可以使用al_get_time来获取当前时间(以秒为单位),但是allegro计时器的准确度仅与基础操作系统时钟相同。

您真正想要的是一种用于这种情况的高性能计时器。看Query performance counter

在Windows上是

,在Linux上是clock_gettime

它们将为您提供纳秒级精度