ich wollte mal wissen ob die Singalbehandlung in C++ bzw. QT genauso zu realisieren ist wie in C?
Code: Alles auswählen
signal(signummer,funktion);
funktion(int){};
KarlHeinz
Code: Alles auswählen
signal(signummer,funktion);
funktion(int){};
Code: Alles auswählen
#include <signal.h>
void signal_handler(int signal)
{
/* Hier steht der Code der Signal Handler-Funktion */
}
int main(int argc, char** argv)
{
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
/* Jetzt wird die Funktion signal_handler aufgerufen, wenn
man kill <PID> an der Konsole eingibt oder aber bei Drücken
von CTRL-C. */
}
Ja genau, in C++ benutzt man ja auch keine freien Funktionen mehr, sondern nur noch Methoden von Klassen.FlorianBecker hat geschrieben:In C++ nutzt man doch normalerweise keine nativen C Dinge mehr, oder? Und in Qt ja gleich überhaupt niemals nicht.
Mister_Crac hat geschrieben:Hm, ich dachte jetzt dem Thread-Ersteller ging es mehr um die Signale, die man eben von der Konsole aus (unter Linux) an einen Prozess schicken kann, wie z.B. kill -9 PID, wobei das ist ein schlechtes Beispiel weil es nicht abgefangen werden kann
Das sollte natürlich genauso wie in C++ gehen. Musst nur den Header <signal.h> einbinden, und schon hast du auch die entsprechende Funktion signal(). Inwieweit sich das mit Qt verträgt, weiß ich aber nicht. Mein Idee wäre, in der Signalbehandlungsfunktion mittels "emit" ein Qt-Signal zu erzeugen und die eigentliche Behandlung dann in einem Slot vorzunehmen. FlorianBecker hat ja schon kurz beschrieben, was es mit Qt-Signalen auf sich hat.Mister_Crac hat geschrieben:Hm, ich dachte jetzt dem Thread-Ersteller ging es mehr um die Signale, die man eben von der Konsole aus (unter Linux) an einen Prozess schicken kann, wie z.B. kill -9 PID, wobei das ist ein schlechtes Beispiel weil es nicht abgefangen werden kann
Inwieweit man das mit Qt machen kann - keine Planung. Bin noch blutiger Anfänger was Qt betrifft.
Code: Alles auswählen
mainwindow.ui.h:89: error: argument of type `void (mainWindow::)(int)' does not match `void (*)(int)'
Was steht denn in Zeile 89?KarlHeinz hat geschrieben:Code: Alles auswählen
mainwindow.ui.h:89: error: argument of type `void (mainWindow::)(int)' does not match `void (*)(int)'
Code: Alles auswählen
signal(SIGUSR1,handler);
Code: Alles auswählen
void mainwindow::handler(int i){}
Ich habe momentan das selbe Problem und möchte meine Applikation durch SIGTERM und SIGINT sauber beenden. Aber das static verbietet mir den Aufruf von Klassenfunktionen oder Signale. Wie kann ich mein vorhaben realisieren?KarlHeinz hat geschrieben:Vielen Dank!
Die Methode war nicht als static deklariert! Jetzt geht es.
KarlHeinz
Code: Alles auswählen
void signal_handler(int signal){
// Applikation beenden falls Signal SIGTERM oder SIGINT
if(signal == SIGTERM or signal == SIGINT){
//senden eines Signals
}
}