Hallo Rudi,
anbei ein Patch für fhem.pl um optional den Funktionsnamen bei RemoveInternalTimer() angeben zu können. Man kann damit folgendes machen:
# Definition von 2 Timern mit $hash als Argument
InternalTimer(gettimeofday()+30, "functionA", $hash);
InternalTimer(gettimeofday()+60, "functionB", $hash);
# Löschen des ersten Timers, der zweite läuft weiter
RemoveInternalTimer($hash, "functionA");
InternalTimer(gettimeofday()+30, "functionA", $hash);
# löschen von beiden Timern (functionA und function B)
RemoveInternalTimer($hash);
Ich habe bei YAMAHA_AVR zwei Timer laufen. Einen für den regelmäßigen Status-Request und einen zweiten der Befehle in der Command-Queue regelmäßig versucht beim Device abzusetzen. Beide benutzen $hash als Argument, rufen aber verschiedene Funktionen auf.
Die bisherige Funktionsweise bleibt davon unberührt.
Gruß
Markus
Heute morgen hatte ich genau diese Funktionalität gesucht ;)
Habs eingecheckt.
Hallo Rudi,
vielen Dank. In diesem Zusammenhang würde ich ebenfalls vorschlagen den Prototype für InternalTimer zu ändern:
aktuell:
InternalTimer($$$$)
Vorschlag:
InternalTimer($$$;$)
So muss man $waitIfInitNotDone nicht immer explizit mit 0 oder 1 angeben. Hier würde mich eh mal interessieren in welchen Fällen das wirklich gebraucht wird?
Gruß
Markus
Hab gerade gesehen, dass du den Prototype geändert hast.
Müsste aber in Zeile 2794 ebenfalls geändert werden.
Prototype mismatch: sub main::InternalTimer ($$$;$) vs ($$$$) at /usr/local/FHEM/bin/fhem.pl line 2794.
Vielen Dank schonmal.
Gruß
Markus
ZitatMüsste aber in Zeile 2794 ebenfalls geändert werden.
Danke fuer den Hinweis, habs gemacht.
Laut svn blame/log habe ich den Parameter bei der "FHT softbuffer rewrite" benoetigt.
Warum genau, kann ich dir aber nicht mehr sagen, immerhin ist es 8+ Jahre her.
das hatten wir vor einer weile mal diskutiert :)
der parameter ist überflüssig und das verhalten mit dem wait das scheinbar mal vorgesehen war funktioniert auch nicht wirklich sondern wartet blockierend und ruft dann $fn aus.
Ich hab im Wiki genau wegen dem blockierenden Aufruf einen entsprechenden Warnhinweis in Großbuchstaben gemacht.