signal ist halt nur C, das geht nur mit Instanzungebundenen Funktionen. Wenn du eine Memberfunktion aufrufen willst, musst du dem signal-Handler den Zugriff auf diese Instanz gestatten: Entweder globale Variable oder irgendwie mit Singleton. Im Signal-Handler kannst du dann beliebige Funktionen aufrufen.
Im Handler selber würde ich nicht allzu viel machen. Eine Extratour in der Eventloop würde ich gar nicht versuchen. Ich weiß nicht, ob dir das OS dazu Zeit lässt, oder bei zu langem Warten einfach den Prozess abwürgt ^^ Hab aber mit signal-Handlern noch nicht wirklich viel gemacht.
Config speichern usw. sollte aber problemlos gehen.
[gelöst] Signalbehandlung in C++
Re: [gelöst] Signalbehandlung in C++
Du könntest einen statischen Pointer auf deine Applikations-Klasse speichern, der aus dem Signal-Handler heraus verwendet werden kann.
[edit] In meiner Konsolenanwendung hab ich:
Code: Alles auswählen
MyApplication* MyApplication::instance= 0;
MyApplication::MyApplication()
: QMainWindow()
{
MyApplication::instance = this;
...
void signal_handler(int signal)
{
MyApplication::instance->doExit();
}
[edit] In meiner Konsolenanwendung hab ich:
Code: Alles auswählen
void downF(int /*signal*/)
{
QCoreApplication::quit();
}
Re: [gelöst] Signalbehandlung in C++
So wie es aussieht gibt mir das System nicht genügend zeit alle Threads ordnungsgemäß zu beenden. Also hat sich erstmal erledigt
Gruß
Alex
Gruß
Alex
Re: [gelöst] Signalbehandlung in C++
Aber du wartest schon aktiv, bis alle Threads aus sind? Nicht dass du ein "stop"-Flag im Thread setzt, und deinen Signal-Handler auslaufen lässt
Re: [gelöst] Signalbehandlung in C++
Das könnte natürlich auch der Grund sein xD. Ich habe aber vorerst den Funktionsumfang meiner Applikation eingeschränkt... komm vlt. drauf zurück
Gruß
Alex
Gruß
Alex
-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
Re: [gelöst] Signalbehandlung in C++
// edit: zu spaet ....