用clock()实现定时程序

问题描述 投票:0回答:1

我正在尝试使用 time.h 为我的程序计时。代码如下所示,我正在使用

gcc
进行编译。

我的问题是,当我尝试运行此代码(我使用的是 Visual Studio Code)时,

start
end
的时间大致相同,并且
solutionFound
由于某种原因非常大(大了几个数量级)比
end
,偶尔为负)。显然这些时间不对,但我不知道为什么或如何解决它。

main.c

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main()
{
    // some input/output using printf() and scanf() to get user options
    int maxLength; scanf("%d", &maxLength);
    
    clock_t     start,              solutionFound, end;
    long double timeToFindSolution, timeToRun;

    start = clock();
    for (int i = 1; i < maxLength; i++;)
    {
        // work...
        if(match()) solutionFound = clock(); // match() defined elsewhere in file
    }

    end = clock();

    timeToFindSolution = ((long double) (solutionFound - start)) / CLOCKS_PER_SEC;
    timeToRun          = ((long double) (end - start))           / CLOCKS_PER_SEC;

    printf("solution found in %Lf, took %Lf to run\n", timeToFindSolution, timeToRun);
    printf("start = %f, foundPswd = %f, end = %f\n", (double)start, (double)solutionFound, (double)end);

    return 0;
}

我尝试将

end = clock()
放入我的循环中,但这没有效果。我在 Stack Overflow 上发现了很多关于如何为程序计时的问题,但没有看到任何人有类似的问题。

我还尝试制作

timeToFindSolution
timeToRun
双精度而不是长双精度(无论如何都不期望程序运行很长时间),仍然遇到同样的问题。

c clock
1个回答
0
投票

好吧,如果我们考虑你的代码的这一部分:

for (int i = 1; i < maxLength; i++;)
{
    // work...
    if(match()) solutionFound = clock(); // match() defined elsewhere in file
}

您并不总是保证会找到匹配项,因此变量

solutionFound
将包含不应该存在的垃圾数据(以防找到匹配项)。

我建议您将其初始化为零,并在没有匹配项时更新处理案例的方式。

© www.soinside.com 2019 - 2024. All rights reserved.