如何在c中实现一个计时器?

我们想在Linux平台下为C程序添加一个定时器。

我们正在尝试发送数据包,我们想知道在1分钟内发送了多less个数据包。 我们希望定时器在发送数据包的while循环的while运行。 例如:

  while(1) { send packets; } 

这个循环将继续发送数据包,直到按下ctrl-z。 计时器应该用来在60秒后停止循环。

Solutions Collecting From Web of "如何在c中实现一个计时器?"

只需在循环的每次迭代中检查时间,并在1分钟过去之后,统计已发送的数据包数量。

编辑改变,以反映问题的实际要求!

 time_t startTime = time(); // return current time in seconds int numPackets = 0; while (time() - startTime < 60) { send packet numPackets++; } printf("Sent %d packets\n", numPackets); 

你可以做这样的事情:

 #include <signal.h> #include <unistd.h> #include <stdio.h> volatile int stop=0; void sigalrm_handler( int sig ) { stop = 1; } int main(int argc, char **argv) { struct sigaction sact; int num_sent = 0; sigemptyset &sact.sa_mask); sact.sa_flags = 0; sact.sa_handler = sigalrm_handler; sigaction(SIGALRM, &sact, NULL); alarm(60); /* Request SIGALRM in 60 seconds */ while (!stop) { send_a_packet(); num_sent++; } printf("sent %d packets\n", num_sent); exit(0); } 

如果循环开销过大,则可以通过每次迭代发送N个数据包并逐次递增计数N来分摊开销。

看看标准的time()函数。

这里是itimer的代码片断,可以在linux平台上用于C上不同的时间间隔:

  #include <signal.h> #include <stdio.h> #include <string.h> #include <sys/time.h> void timer_handler (int signum) { static int count = 0; printf ("timer expired %d times\n", ++count); } int main () { struct sigaction sa; struct itimerval timer; /* Install timer_handler as the signal handler for SIGVTALRM. */ memset (&sa, 0, sizeof (sa)); sa.sa_handler = &timer_handler; sigaction (SIGVTALRM, &sa, NULL); /* Configure the timer to expire after 1 sec... */ timer.it_value.tv_sec = 1; timer.it_value.tv_usec = 0; /* ... and every 1000 msec after that. */ timer.it_interval.tv_sec = 1; timer.it_interval.tv_usec = 0; /* Start a virtual timer. It counts down whenever this process is * executing. */ setitimer (ITIMER_VIRTUAL, &timer, NULL); /* Do busy work. */ while (1); sleep(1); } 

希望这会有所帮助。

男人3睡觉:

名称睡眠 – 睡眠指定的秒数

内容概要#include <unistd.h>

  unsigned int sleep(unsigned int seconds);