pthread beenden



  • Hallo

    Wie kann ich einen pthread "abwürgen"?

    Ich habe einen Thread erzeugt, der mit getchar die Tastatur abfragt, wenn ich diesen mit pthread_exit abbreche und pthread_join warte, muss ich erst eine Taste drücken, damit getchar verlassen wird und der Thread beendet.

    Nun ist meine Frage, wie ich den Thread abbrechen kann, egal was darin läuft.

    Besten Dank, Gruss
    Thomas



  • Keiner eine Idee? 😞

    Gruss Thomas



  • wirst ihm wohl n SIGHUP signal schicken müssen.



  • Hallo
    Sighup Signal? Hmmmm... noch nie gehört, ist aber ein Anhaltspunkt, dann werde ich mal "Googeln". 😃

    Danke, Gruss
    Thomas



  • #include <signal.h>
    
    int main() {
      raise(SIGHUP);
    }
    

    man: raise(3)



  • Danke, werde ich dann morgen mal testen.
    Gruss Thomas



  • Aehmmm ?

    Mit SigHup schiesst er doch nen Prozess ab ?
    Er hat aber threads ? Glaub nicht, das er da seinen ganzen Prozess loswerden will ...
    Gruebel ...

    Kenn mich mit Linux da nicht so aus, aber getchar() wirst immer da haengen bleiben.
    Was du brauchst, ist nen Event, wenn wer die taste gedruckt hat ... und dass die dann auslesen kannst. Du musst das blockieren da wegbekommen ... eventuell mit nem timer/sleep und ner endlos schleife.
    So kannst dann auch auf mehrere event reagieren ...

    Unter windows wuerde man mit dem keypressed messages und mit WaitForMultioleEvents() oder so arbeiten ...

    Ciao ...



  • jo, mit SIGHUP drüfte das nicht gehen (zumindest nicht POSIX konform).

    In der FAQ findest du Beiträge zum Thema kbhit und getch, womit du einzelne Zeichen auslesen kannst, wenn welche vorhanden sind.



  • Hallo

    Ja, das ganze Programm beendet sich (kurzer Test) mit dem SIGHUP.
    Ich werde dann mal kbhit anschauen.



  • Mach mal kill(THREAD_ID, SIGHUP)

    Für THREAD_ID setzt du das pthread_t Objekt ein.

    Ich meine mal irgendwann gelesen zu haben, dass die pthread-Bibliothek über fork() implementiert ist. Das würde erklären, warum das nach o.g. Verfahren funktioniert. Wie kingruedi aber schon sagte, ist das nicht wirklich posix-konform und ziemlich schmutzig, denn Posix schreibt ja nicht vor, dass pthread_t im Prinzip ein int oder ein pid_t ist.

    Achja, eine andere Möglichkeit wäre, eine Variable ständig im zu beendenen Thread auf einen bestimmten Zustand hin abzufragen. Hat sie diesen bestimmten Zustand, killt der Thread sich über thread_exit() oder einfach eine return-Anweisung selbst.



  • Das Problem ist, dass der Thread im getchar() wartet, somit bringt das mit der Variable nichts.



  • Ich hab Signale noch nicht wirklich im Zusammenhang mit Threads genutzt. Aber falls ein Thread allein auf ein Signal reagieren kann, dann mach folgendes.
    Schreib einen sighandler der deinen Thread abschiesst.
    In der Threadfunktion setzt du den sighandler auf ein Signal (z.B. SIGUSR1) und naja, dann sollte es vielleicht klappen wenn du das Signal schickst.


Anmelden zum Antworten