[C] Probleme miit setitimer

Hallo,

ich soll ein Programm schreiben, dass Primzahlen berechnet, solange ein Timer noch läuft. Das ganze soll 10Mal passieren, und dann der Mittelwert berechnet werden.
Die Aufgabe ist eigentlich nicht schwer, aber immer wenn der 1. Timer abgelaufen ist, beendet sich das Programm mit der Ausgabe „Alarm clock“
Ich habe ein wenig gegoogelt und herausgefunden, dass es irgendwie an der falschen Behandlung von SIGALRM liegen muss. Wisst ihr was ich hier am besten tun kann?

#include "header.h"
short isPrime(long);
void sigfkt();

int flag=1;

int main(){
 int start,n=0,i=0,gesamt=0,startwert,status;
 double durchschnitt;
 struct itimerval itime;
 signal(14,SIG\_DFL);
 signal(14,sigfkt);
 printf("Ab welcher Zahl sollen die Primzahlen berechnet werden?");
 scanf("%d",&start);
 itime.it\_value.tv\_sec=1;
 itime.it\_interval.tv\_sec=0;
 itime.it\_value.tv\_usec=0;
 itime.it\_interval.tv\_usec=0;
 startwert=start;
 for(i=0;i

Howdy,

Ausgabe „Alarm clock“
Ich habe ein wenig gegoogelt und herausgefunden, dass es
irgendwie an der falschen Behandlung von SIGALRM liegen muss.

die Signal Disposition fuer SIGALRM wird beim ersten Aufruf des Signalhandlers auf den Defaultwert zurueckgesetzt. Der Defaulthandler fuer SIGALRM druckt „Alarm clock“ und terminiert das Programm.

Richtige Handhabung deshalb ohne „signal“, dafuer mit „sigaction“

Einmalig:

 struct sigaction oAction;
 memset(&oAction,0,sizeof(oAction));
 oAction.sa\_handler = sigfkt;
 sigaction(SIGALRM,&oAction,NULL);

Beachte, dass die Signal Handler normalerweise eine andere Signatur haben, als die, die du codiert hast.

Gruss
norsemanna

Hallo,

ich soll ein Programm schreiben, dass Primzahlen berechnet […]
Die Aufgabe ist eigentlich nicht schwer

Herzlichen Glückwunsch. Ein Programm, das Primzahlen direkt berechnen kann, suchen sehr viele Menschen schon sehr lange. Wenn das für Dich nicht schwer ist, darfst Du Dich schon mal über die sicher bald folgende Fields-Medal freuen.

http://de.wikipedia.org/wiki/Fields_Medal

Gruß

Fritze

Guten Tag,

Entschuldigung, das war etwas unglücklich formuliert, aber man muss auch nicht gleich so grantig reagieren.

Ich glaube es ist klar ersichtlich, dass es in dem Programm darum geht, zu identifizieren ob es eine Zahl eine Primzahl ist oder nicht.

Ich bitte um konstruktive Kritik nicht Wortklauberei!

Danke sehr norsemanna,

das hat das Problem gelöst!

Ein paar meiner Kommilitonen hatten das gleiche Problem und scheinbar zuerst setitimer aufgerufen und danach erst die itimerval Strukur initialisiert…

Wir hatten die sigaction Funktion nur erwähnt, also scheint es auch ohne irgendwie zu gehen.

Viiielen Dank!

Hallo,

Ich glaube es ist klar ersichtlich, dass es in dem Programm
darum geht, zu identifizieren ob es eine Zahl eine Primzahl
ist oder nicht.

Ich bin gar nicht grantig, möchte aber darauf hinweisen, dass auch das Erkennen von Primzahlen nur unbefriedigend gelöst und alles andere, als ein triviales Problem ist.

Was Dein Programm machen soll, ist Primzahlen zu generieren. Dafür gibt es ein paar Verfahren, die aber bei großen Zahlen an ihre Grenzen stoßen.

Gruß

Fritze