我们想在Linux平台下的C程序中添加一个定时器。
我们正在尝试发送数据包,并且希望了解 1 分钟内发送了多少数据包。我们希望计时器与while
正在执行发送数据包的循环。例如:
while(1)
{
send packets;
}
该循环将继续发送数据包,直到按下 ctrl-z。应使用计时器在 60 秒后停止循环。
你可以这样做:
#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 来分摊开销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)