Strg+C / Timer



  • Die folgenden beiden Frage beziehen sich auf eine Konsolen Anwendung (eine .cpp Datei, die mit g++ kompiliert wird):
    1. Wie kann auf die Tastenkombination Strg+C reagieren?
    2. Wie kann ich einen Timer realisieren, der zB alle 5 Sekunden eine Funktion aufruft, dazwischen aber nicht übermäßig viel Rechenleistung in Anspruch nimmt?



  • Zu 1)
    Ctrl-C entspricht dem Signal SIGINT. Wenn du einen Signal-Handler einrichtest, der dieses Signal abfängt und ignoriert, passiert bei Ctrl-C nichts mehr.
    Wie's geht? So:

    signal(SIGINT, SIG_IGN);
    

    Wieder zurück auf Voreinstellung:

    signal(SIGINT, SIG_DFL);
    

    Zu 2)
    Mit der Funktion alarm() kannst du nach einer Wartezeit (in Sekunden) das Siganl SIGALRM auslösen. Da kannst du einen eigenen Signal-Handler hinterlegen:

    void my_function(int signum)
     {
      ...
      alarm(5);
      return;
     }
    
    int main()
     {
      signal(SIGALRM, my_function);
      alarm(5);
      ...
     }
    

    Wenn du mehr über diese Themen wissen willst, schau doch mal in mein Buch "C und Linux" 😉

    Martin



  • Was für einen Header braucht man denn noch für alarm()?



  • @Markus
    wenn du Fragen zu C Funktionen hast, dann benutz am besten die Manpages, da steht alles drin, was du wissen musst (gib einfach mal man man auf der Konsole ein)



  • @Martin G
    muss die werbung sein? außerdem ist die url nicht verfügbar.

    @Unregistrierter
    verwende lieber gleich sigaction und verzichte auf signal. sigaction ist die modernere methode, signale zu verwalten. sie ist nur minimal komplexer, bietet aber mehr funktionalität, die du später mal vielleicht brauchen wirst.



  • @besserwisser
    der Thread ist von 2002(!) und wurde nur von einem Spambot hervor geholt.


Anmelden zum Antworten