Ankündigung

Einklappen
Keine Ankündigung bisher.

Rules Threadsafe?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Rules Threadsafe?

    Hi,

    sind Rules Threadsafe?

    Ich hatte gerade ein Verhalten, dass ein Timer einer Rule wohl zweimal gesetzt wurde und somit durch ein anschliessendes cancel nur einer der beiden Instanzen gestoppt wurde. Wie könnte ich eine mehrmaliges setzen eines Timers verhindern?
    lg
    Stefan

    #2
    Also, wenn ein Timer einer Variablen (außerhalb der Rule definiert) zugeordnet ist, kann er eigentlich auch nur einmal erstellt werden.
    Innerhalb der Rule, in der der Timer erstellt wird, sollte man immer mit einen Konstrukt wie
    Code:
    if(myTimer == null)
    prüfen, ob der Timer schon läuft. Je nach gewünschtem Verhalten macht man dann halt nichts, oder man cancelt den schon laufenden Timer bevor man den neuen erstellt.

    Kommentar


      #3
      Die Timervariable wird ausserhalb der Rule deklariert, jedoch innerhalb der Rule instanziert. Wenn die Rule nun nicht Threadsafe ist, dann kann es passieren, dass dieser Variable mehrmals eine neue Timerinstanz zugewiesen wird. Was dann mit der alten Instanz passiert (die nun keiner Variablen mehr zugewiesen ist) ist die Frage, bzw. wann der GC diese löscht.
      Meinen Fall kann ich mir aktuell nur durch ein Threadproblem erklären.
      Meine Problem genau:
      1.) BWM löst aus
      2.) zwei Telegramme innerhalb von 50ms werden gesendet (6/5/111 wird auf 01 gesetzt)
      3.) Rule wird zweimal ausgeführt (zwei Logeinträge, dass der Timer gesetzt wird)
      4.) Timer wird deaktivert (per Visu)
      und nun
      5.) Timer löst aus
      lg
      Stefan

      Kommentar


        #4
        Habe gerade gesehen, dass es einen Lock/Synchronize-Mechanismus gibt, mal schauen, obs damit funktioniert
        lg
        Stefan

        Kommentar

        Lädt...
        X