在C中经过一段时间之后突破了双倍

时间:2013-03-10 07:31:32

标签: c timer signals perfect-numbers

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

1 个答案:

答案 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);){
        }
    }
}