如何在C中使用计时器?

在C中使用计时器的方法是什么? 我需要等到500毫秒才能找到工作。 请提及做这项工作的任何好方法。 我用过sleep(3); 但是这种方法在那段时间内没有做任何工作。 我有一些东西会尝试,直到那个时间来获得任何输入。

您可以使用time.h中time_t struct和clock()函数。

使用clock()将开始时间存储在time_t结构中,并通过比较存储时间和当前时间之间的差异来检查已用时间。

这是我使用的解决方案(它需要#include ):

 int msec = 0, trigger = 10; /* 10ms */ clock_t before = clock(); do { /* * Do something to busy the CPU just here while you drink a coffee * Be sure this code will not take more than `trigger` ms */ clock_t difference = clock() - before; msec = difference * 1000 / CLOCKS_PER_SEC; iterations++; } while ( msec < trigger ); printf("Time taken %d seconds %d milliseconds (%d iterations)\n", msec/1000, msec%1000, iterations); 

可能这个例子对你有所帮助

 #include  #include  #include  /* Implementation simple timeout Input: count milliseconds as number Usage: setTimeout(1000) - timeout on 1 second setTimeout(10100) - timeout on 10 seconds and 100 milliseconds */ void setTimeout(int milliseconds) { // If milliseconds is less or equal to 0 // will be simple return from function without throw error if (milliseconds <= 0) { fprintf(stderr, "Count milliseconds for timeout is less or equal to 0\n"); return; } // a current time of milliseconds int milliseconds_since = clock() * 1000 / CLOCKS_PER_SEC; // needed count milliseconds of return from this timeout int end = milliseconds_since + milliseconds; // wait while until needed time comes do { milliseconds_since = clock() * 1000 / CLOCKS_PER_SEC; } while (milliseconds_since <= end); } int main() { // input from user for time of delay in seconds int delay; printf("Enter delay: "); scanf("%d", &delay); // counter downtime for run a rocket while the delay with more 0 do { // erase the previous line and display remain of the delay printf("\033[ATime left for run rocket: %d\n", delay); // a timeout for display setTimeout(1000); // decrease the delay to 1 delay--; } while (delay >= 0); // a string for display rocket char rocket[3] = "-->"; // a string for display all trace of the rocket and the rocket itself char *rocket_trace = (char *) malloc(100 * sizeof(char)); // display trace of the rocket from a start to the end int i; char passed_way[100] = ""; for (i = 0; i <= 50; i++) { setTimeout(25); sprintf(rocket_trace, "%s%s", passed_way, rocket); passed_way[i] = ' '; printf("\033[A"); printf("| %s\n", rocket_trace); } // erase a line and write a new line printf("\033[A"); printf("\033[2K"); puts("Good luck!"); return 0; } 

编译文件,运行和删除后(我的偏好)

 $ gcc timeout.c -o timeout && ./timeout && rm timeout 

尝试自己运行以查看结果。

笔记:

测试环境

 $ uname -a Linux wlysenko-Aspire 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux $ gcc --version gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.