0

我有一个问题,我正在编写一个代码,该代码通过强制执行我的作业所需的算法来找到完美的数字。我想看看范围在 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);
}
4

1 回答 1

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);){
        }
    }
}
于 2013-03-10T07:35:29.983 回答