我有一个问题我正在编写一个代码,通过强制执行我的任务所需的算法来找到完美的数字。我想看看范围在15秒内走多远。我尝试使用while循环和警报,但似乎根本不起作用。我怎么去那里?
由于
继承我的代码:
#define _POSIX_SOURCE
#define _BSD_SOURCE
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.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(15); /* Request SIGALRM in 60 seconds */
while (!stop) {
for (;;){
for (;;){
}
}
}
printf("%d \n", num_sent);
exit(0);
}
答案 0 :(得分:0)
即使警报被触发并将stop
设置为非零值,您也不会注意到,因为for
循环没有返回到外部while
。您需要将condition
应用于应停止的所有循环:
while (!stop) {
for (;!stop;){
for (;!stop;){
}
}
}
alarm
的替代方法只是检查您是否越过某个时间点:
time_t end = time(0) + 15;
while (end < time(0)) {
for (;end < time(0);){
for (;end < time(0);){
}
}
}