namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:raise
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:raise [2012-04-11 17:23] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
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 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki