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ループは外部に戻らないため、気付くことはありませんwhilecondition停止する必要があるすべてのループにを適用する必要があります。

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 に答える