Parameter an Signalhandler übergeben - Wie?
-
Hallo,
bisher habe ich folgenden Code:
void my_sig_handler(int signum) { std::cout << "Zustände werden gelöscht" << std::endl; } int main () { ..... ..... signal(SIGALRM, my_sig_handler); ...... ...... alarm(5) }Nun müsste ich an my_sig_handler noch einen Int-Wert und einen Zeiger auf ein Objekt übergeben. Nur weiß ich nicht wie ich das anstellen soll. Denn wenn ich Parameter beim Signalaufruf angeben, kompiliert er nicht :-(.
Hat jemand ne Idee wie ich das anstellen könnte?
Danke
Michael
-
Emmerell schrieb:
Denn wenn ich Parameter beim Signalaufruf angeben, kompiliert er nicht :-(.
Fehlermeldung?
-
Wenn ich so aufrufe:
signal(SIGALRM, my_sig_handler(ID));kommt "falsche Benutzung eines void Ausdruckes".
Ich weiß jetzt aber auch nicht genau wie ich an diese Funktion Parameter übergeben kann, da es ja offensichtlich ein Zeiger auf ne Funktion ist.
Ich denke, am einfachsten wird es wohl sein ne Klasse drumzubauen und jeweils neue Timer Objekte zu instantiieren.
Gruß
Michael
-
Ich glaube, die Parameterliste eines signalhandlers ist fest vorgeschrieben. Der erwartet ein int, nix anderes (das ist zumindest mein Eindruck nach 5 Minuten Internet-Recherche).
Vielleicht könnte es klappen, globale Variablen zu verwenden (als volatile deklarieren!).
Vielleicht interessant für dich:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-72414-and-highlight-is-signalhandler.html
-
Emmerell schrieb:
Wenn ich so aufrufe:
signal(SIGALRM, my_sig_handler(ID));kommt "falsche Benutzung eines void Ausdruckes"....
Das ist ja auch klar, weil "my_sig_handler(ID)" bereits ein Funktionsaufruf ist und Du einen Funktionszeiger brauchst.
Sprich: Du hast einen neuen Fehler eingebaut, wo Du den alten lösen wolltest. Um dem auf die Schliche zu kommen nochmal:_matze schrieb:
Emmerell schrieb:
Emmerell schrieb:
Denn wenn ich Parameter beim Signalaufruf angeben, kompiliert er nicht :-(.Fehlermeldung?
Bist beileibe nicht der Einzige, aber ich bin immer wieder überrascht, wieviele Leute nur unterscheiden zwischen "tut" und "Oh Fehler" ... das wird die Compilerhersteller betrüben, die sich viel Mühe machen, die Ursachen/Auslöser für die Fehler in Meldungen zu schreiben....
Gruß,
Simon2.