Thread mit endlosschleife beenden



  • Hallo Forum,

    einen Eintrag wie diesen sollte es wohl etliche geben.... ich hab aber leider keinen gefunden. Also wenn ihr einen Link als Antwort habt nur her damit 😉

    Ich arbeite auf einem Linux-System.

    Ich habe einen Thread der alle 10 Minuten mal so seine Peripherie durchgeht und ggf. notwendige Änderungen vornimmt.

    Mit signal() habe ich eine Funktion angegeben, die bei SIGINT das Herunterfahren einleiten soll (Also Speichern der notwendigen Daten und sauberes Beenden).

    Der Thread ist aber immer für 10Minuten im sleep(). Jetzt könnte ich den Thread mit pthread_kill() einfach killen, was aber nicht die feine Art wäre.

    Aber nach einer Variablen, die den Status angibt kann der Thread ja erst nach 10 Minuten gucken und das ist definitiv zu lange zum herunterfahren, vor allem dafür, dass er nichts tut.

    Gibt es eine andere Möglichkeit, wie ich meinen Thread zum schlafen bringe, ohne ihn wirklich einzufrieren oder wie kann man ein solches Problem am Besten angehen?

    Danke im voraus

    mfg tremml



  • Dann schlaf halt nur 30 Sek. Schau ob die 10 Min. um sind, wenn ja, mach das was der Thread machen soll, wenn nein, schlaf 30 Sek.



  • Ok. An diese Möglichkeit habe ich auch schon gedacht, aber gibt es da nichts besseres?



  • du könntest doch in dem thread nen neuen starten, der parallel zu sleep() eine abbruchbedingung überprüft.



  • und wie soll der dann den sleependen beenden? *g

    Das gleiche könnte ich so ja dann auch im hauptthread machen wenns gehn würd 😉 bzw, wenns gut gehen würde.



  • äh.
    sleep müsste doch eigentlich ein cancellation point sein, oder?
    dann cancel den thread doch einfach ... nicht?

    ansonsten kannst du ein timed wait auf eine condition variable verwenden statt sleep, und die signalst du dann einfach wenn du den thread killen willst.


Anmelden zum Antworten