Verhalten von Timeout

Hallo zusammen

Wenn einer meint das ein Timer mit 2 Sekunden Laufzeit wirklich 2 Sekunden läuft der möge sich das mal durchlesen.

Irgendwie bin ich mit der Funktion „fibaro.setTimeout“ noch auf dem Kriegfuss
Das funktioniert alles so lange keine CPU-Last in das Timerverhalten eingreift.
Ich habe mal ein Demo-Programm erstellt das genau das Problem aufzeigt.
Wenn ich einen Timer benutze so muss ich davon ausgehen, das er auch genau zu der Zeit anspricht.
Bei Timeout ist das aber nicht der Fall !!
Wozu soll ich laut Fibaro den benutzen wenn sein Verhalten dem Zufall überlassen ist.

Das ist ja prima das der Hauptzweig weiter läuft aber :

  1. Das steht nirgend wo (Für Anfänger sehr verwirrend, Ist aber vom Syntax her Logisch) .
  2. Wenn ich 2s haben möchte dann müssen es auch 2s sein!
  3. Was passiert wenn die CPU-Last wechselt und ich möchte genau bei 2s was auslösen?

Ich verlange ja kein Echtzeitsystem aber ein Logisches System schon.

Hier das Demoprogramm.

Die loop ist nur dazu da um eine CPU-Last zu simulieren.

Zur Erklährung für Neulinge :
Während des loops (repeat/until ) ist die CPU zu 100% ausgelastet also Vorsicht vor dessen Gebrauch.

local starttime = 0
local t_diff = 0
local mom_time = 0
print("Start Testszene")
starttime = os.time()
fibaro.setTimeout(5000, function()
    mom_time = os.time()
    t_diff = (mom_time - starttime)
    print("Print-1 soll = 5 ist = ", t_diff)
end)
fibaro.setTimeout(2000, function() 
    mom_time = os.time()
    t_diff = (mom_time - starttime)
    print("Print-2 soll = 2 ist = ", t_diff)
end)
fibaro.setTimeout(6000, function() 
    mom_time = os.time()
    t_diff = (mom_time - starttime)
    print("Print-3 soll = 6 ist = ", t_diff)
end)
fibaro.setTimeout(1000, function() 
    mom_time = os.time()
    t_diff = (mom_time - starttime)
    print("Print-4 soll = 1 ist = ", t_diff)
end)
mom_time = os.time()
t_diff = (mom_time - starttime)
print("Print-5 soll = 0 ist = ", t_diff)
i = 0
repeat
i=i+1
until i == 2000000 -- Mal verändern und schauen was mit der Zeit passiert
mom_time = os.time()
t_diff = (mom_time - starttime)
print("Print-6 soll = 0 ist = ", t_diff)

Das Verhalten muss man kennen und berücksichtigen.
Gruss Frank