Freezedevil
Lieutenant
- Registriert
- Mai 2011
- Beiträge
- 643
Hi,
ich versuche gerade einen Signalhandler in eine Klasse zu stecken, da ich ein Attribut dieser Klasse brauche. Allerdings habe ich damit gewisse Schwierigkeiten.
Erstmal ein bisschen Code:
In diesem Minimalbeispiel möchte ich im Signalhandler gern die 3 ausgeben.
Auf j kann ich nicht zugreifen, da es nicht statisch ist. Ich kann es auch nicht statisch machen, da es erst beim erstellen des Objekts gesetzt werden kann.
Alternativ könnte ich die 3 in main beim Registrieren des Handlers übergeben, da die 3 dort bekannt ist. Soweit ich das aber überblicke ist das nicht möglich.
Fällt jemandem von euch eine elegante Lösung ein die ohne globale Variable auskommt? (Das globale abort wird es im fertigen Code auch nicht geben)
Und noch eine Frage. Ich habe irgendwo aufgeschnappt, dass es nicht gesund ist cout innerhalb eines Signalhandlers zu nutzen. Da war irgendwie von Deadlocks die Rede. Kann mich jemand dahingehend erleuchten, da ich bisher mit dem obigen Code keine Probleme hatte?
Ich danke euch schonmal und hoffe, dass ich ebenso aufschlussreiche Antworten wie sonst erhalte.
ich versuche gerade einen Signalhandler in eine Klasse zu stecken, da ich ein Attribut dieser Klasse brauche. Allerdings habe ich damit gewisse Schwierigkeiten.
Erstmal ein bisschen Code:
Code:
#include <iostream>
#include <signal.h>
using namespace std;
bool abort=false;
class Test {
private:
int j;
public:
Test (int i) : j(i) {}
static void handler(int sig) {
cout << endl << "closing" << endl;
abort = true;
}
};
int main() {
cout << "started" << endl;
Test t(3);
signal(SIGINT, Test::handler);
while(!abort){}
}
Auf j kann ich nicht zugreifen, da es nicht statisch ist. Ich kann es auch nicht statisch machen, da es erst beim erstellen des Objekts gesetzt werden kann.
Alternativ könnte ich die 3 in main beim Registrieren des Handlers übergeben, da die 3 dort bekannt ist. Soweit ich das aber überblicke ist das nicht möglich.
Fällt jemandem von euch eine elegante Lösung ein die ohne globale Variable auskommt? (Das globale abort wird es im fertigen Code auch nicht geben)
Und noch eine Frage. Ich habe irgendwo aufgeschnappt, dass es nicht gesund ist cout innerhalb eines Signalhandlers zu nutzen. Da war irgendwie von Deadlocks die Rede. Kann mich jemand dahingehend erleuchten, da ich bisher mit dem obigen Code keine Probleme hatte?
Ich danke euch schonmal und hoffe, dass ich ebenso aufschlussreiche Antworten wie sonst erhalte.