time. h函数clock()返回1个刻度,之后返回0个刻度,因此测量返回负时间[重复]

0g0grzrc  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(145)

此问题已在此处有答案

How to get the current time in milliseconds from C in Linux?(8个回答)
3天前关闭。
我试图得到一个时间戳在滴答开始一个周期性的任务与减少抖动.为了做到这一点,我得到滴答在每一秒的开始,并在第一次执行一个任务时,我通过减去startTicks从currentTicks初始化一个时间戳.问题是,这已被证明是非常不可靠的,因为大多数时候我的第一个任务有一个时间戳-1滴答又名-0.001s.这使我相信其余的也是无效的。

void main(){
    clock_t startTicks;           //Ticks at the start of Second;
    time_t StartSeconds, CurrentSeconds;            //
    time(&StartSeconds);
    time(&CurrentSeconds);
    // stuff ListFunctions();
    for(;;){
        if(CurrentSeconds != time(NULL)){     // Groundwork of iteratig over code every second
            startTicks = clock();
            // initializeTasks if they need to be
            // reset Task availability
            time(&CurrentSeconds);             
        }
        for (int Task = 0; Task < 4; ++Task) {    // initialize timestamp on first run
            if(Tasks[Task].StampInitialized == 0){
                Tasks[Task].TimeStamp = clock() - startTicks;
                printf("%d - %d = %d", clock(), startTicks, Tasks[Task].TimeStamp);      
                Tasks[Task].StampInitialized = 1;
            }
            // wait if time stamp hasnt been crossed
            printf("Start Task %d: %.3f; ", Task + 1, 1.0 *(clock() - startTicks) / CLOCKS_PER_SECOND);
            // execute Task
        }
    }
}

输出如下所示:

> 0 - 1 = -1 Start Task 1: 0.000;
> 3 - 1 = 2 Start Task 2: 0.005;
> 8 - 1 = 7 Start Task 3: 0.008;
> 11 - 1 = 10 Start Task 4: 0.012;

CLOCKS_PER_SECOND = 1000,根据我的测试,这是正确的。
我找不到任何可以解释时钟的东西()更详细,我很难相信它只需要-1ms从程序开始到4个任务的初始化。初始化只不过是为每个任务创建一个数组并对内容进行排序。虽然显然是从TimeStamp初始化到任务执行。(这是只写入一个变量一次和1如果问题)需要0和2 ms之间的输出所表示的.我真的想不出任何可能导致这个问题,除了一些愚蠢的逻辑错误.然而,我找不到任何东西,我希望它的东西,我可以修复,而不仅仅是奇怪的行为.
很抱歉,如果有很多信息丢失,这是我在任何论坛上的第一个问题,英语不是我的母语。我愿意接受批评和任何问题。
先谢谢你了。

h9vpoimq

h9vpoimq1#

startTicks未初始化。请初始化它。

clock_t startTicks = clock();

总的来说,我不明白代码中发生了什么。if(CurrentSeconds != time(NULL)){ startTicks = clock(); time(&CurrentSeconds); }if看起来什么都不做。

相关问题