Frage zu Semaphoren und Threads
-
Hallo Forum
ich habe einen Timer, in dem ich eine Funktion aufrufe. Mein Problem ist jetzt, dass der Timer aufgerufen wird und die Funktion teilweise noch nicht fertig ist, so dass ich irgendwann einen Heap-Fehler bekomme. Um meinen Timer sicherer zu machen hatte ich überlegt, Semaphoren zu benutzen. Geht das überhaupt oder kann man Semaphoren nur in Verbindung mit Threads benutzen? Wenn ja (also Semaphoren nur in Zusammenhang mit Threads), wie kann ich dann meinen Timer so programmieren, dass die Funktion nur dann aufgerufen wird, wenn sie auch tatsächlich schon fertig ist mit rechnen?

Vielen Dank für eure Hilfe!
-
Kannst Du nicht den Timer abschalten bevor die Berechnung beginnt und ihn später wieder aktivieren?
-
Nein, leider nicht. Ich benutze den Timer um Profile eines Scanners auszulesen. Die Profile hole ich alle 50ms ab. Dabei werden die Profile in ein lokal angelegtes array geschrieben, welches dann am Ende des Timerdurchlaufs wieder gelöscht wird. Dabei kann es jetzt halt passieren, dass der Timer aufgerufen wird, das array noch nicht frei gegeben war und frei gegeben wird wenn es eigentlich schon wieder beschrieben wird. Und ich möchte halt, solange noch Daten in das Array geschrieben werden, dass das array nicht freigegeben wird. Und dabei dachte ich eben an Semaphoren. Aber vielleicht gibt es dafür auch eine einfachere Lösung.
-
nimm halt ein thread statt nen timer mit sleep(INTERVAL); !!! dann kannst syncronisieren;)
-
Welche API verwedest du für deine Timer? Mir wäre keine bekannt welche Callbacks für Timer reentrant aufruf, bzw. es würde mich sehr wundern wenn eine API die ich kenne das tun würde.