namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:raise

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

kennen:lib:raise [2012-04-11 17:23] (aktuell)
Zeile 1: Zeile 1:
 +====== raise() ======
 +''#​include''​ [[..:​include:​csignal]]
 +
 +<code cpp>
 +int raise (int signum) ​
 +</​code>​
 + Löst ein Signal ''​signum''​ aus.
 +
 +Warnung:
 +Destruktoren
 +[[..:​typen#​Geltungsbereich und Lebensdauer|automatischer und statischer Objekte]]
 +werden nicht aufgerufen.
 +In C++ sollte der Mechanismus der
 +[[..:​ausnahmen|Ausnahmebehandlung]] vorgezogen werden.
 +
 +==== Parameter ====
 +| ''​signum''​ | Signalnummer |
 +==== Ergebnis ====
 +Rückgabewert:​ 0 bei E
 +
 +==== Siehe auch ====
 +[[abort]],
 +[[signal]].
 +
 +==== Beispiel ====
 +<code cpp raise.cpp>​
 +#include <​cstdio>​
 +#include <​csignal>​
 +using namespace std;
 +
 +int ist_prim(int p)
 +{
 +  int erg = p>=2;
 +  for (int i = 2; i < p; ++i)
 +  {
 +    if (p%i == 0) erg = 0;
 +  }
 +  return erg;
 +}
 +
 +int max_prim = 2;
 +
 +void tschuess(int num)
 +{
 +  printf("​groesste gefundene Primzahl: %d\n", max_prim); ​
 +  signal(SIGINT,​ SIG_DFL);
 +  raise(SIGINT); ​          // unsauber ???
 +}
 +
 +void zwischenbericht(int num)
 +{
 +  static int versuch = 1;
 +  printf("​Versuch %d bei %d\n", versuch, max_prim); ​
 +  signal(SIGINT,​ ++versuch < 3 ? zwischenbericht : tschuess);
 +}
 +
 +int main()
 +{
 +  printf("​Suche grosse Primzahl\nAbbruch mit Strg+C (3 Versuche)\n"​);​
 +  signal(SIGINT,​ zwischenbericht);​
 +  for (int n = 1; n > 0; ++n) 
 +  {
 +    if (ist_prim(n)) max_prim = n;     
 +  }
 +  return 0;
 +}
 +</​code>​
  
kennen/lib/raise.txt · Zuletzt geändert: 2012-04-11 17:23 (Externe Bearbeitung)