1

我是 Windows 用户,我正在学习 C。我在家里使用 Codeblocks 和 visual c++ 2008 express 编写简单的 C 命令行程序(我是初学者),当 codeblocks 在结束时间(例如:“进程返回 0 (0x0) 执行时间:6.848 秒”)。

我想将此功能添加到 .exe 中,以便我可以在几台计算机上对程序进行“基准测试”或“测试”。我尝试使用 time(NULL) 但它只能以 1 秒的精度工作。

我还在这里找到了非常有趣的答案(我实际上正在寻找同样的东西):Calculating time by the C++ code

Mark Wilkins 提出的解决方案在我的 windows 64 位 PC 上的 visual c++ 2008 express 上运行良好,但 .exe 在其他任何地方都不起作用。难道我做错了什么?

我想要一种方法来计算我的程序经过的挂墙时间,它必须具有 32 位兼容性。提前致谢!

4

3 回答 3

2

time.h 头文件中有一个函数 clock_t clock();

它返回自程序启动以来已过期的硬件计时器时钟数要获得实时,您可以将该数字除以常数 CLOCKS_PER_SEC,该常数也在 time.h 中定义

完整的方法是:

void print_time_since_launch() {
    printf ("Execution time %f", clock() / CLOCKS_PER_SEC);
}

你可以像这样在你的程序中使用它:

static clock_t s_start_time;
void start_clock() { s_start_time = clock(); }
void display_execution_time() { 
    clock_t now = clock();
    double secs = (now - s_start_time) / (double)CLOCKS_PER_SEC;
    printf("Execution time: %g secs\n", secs);
}
int main() {
    start_clock();
    /* do your thing */
    display_execution_time();
}
于 2010-04-17T19:28:12.480 回答
0

它在某些 PC 上不起作用的原因是......请参阅我的回答

现代 PC 的内部时钟有多精确?

于 2010-04-17T19:31:20.093 回答
0
#include <mmsystem.h>

int
main() {
    DWORD start = timeGetTime();
    //Do work
    DWORD end = timeGetTime(); 
    printf("execution time: %.3f s\n", float(end - start) / 1000.0f);
}
于 2010-04-17T20:11:14.123 回答