Hallo allerseits,
ich grüble nun schon geraume Zeit an einer
Variante, wie ich Geräte permanent über die serielle Schnittstelle
abfragen kann. Gelöst habe ich dies bisher mittels eines eigenen Threads
in der Geräteklasse welcher zwischen 2 und 5 Subs bzw. Funktionen
permanent nacheinander aufruft und bei sich ändernden Werten dies
mittels Event mitteilt. Die serielle Schnittstelle ist dabei via
Synclock entsprechend gesperrt.
Beispiel:
Die Funktion ReadValue liest einen Wert vom Gerät. Die Funktion kann sowohl vom User
als auch von einem Thread ausgeführt werden. Wenn nun jedoch der User
ReadValue aufruft und gleichzeitig der Thread diese Funktion bearbeitet,
könnte es vorkommen das Variablen innerhalb der Funktion einen
undefinierten Zustand erhalten.
Vereinfacht und ohne Fehler abzufangen zB. so:
Function ReadValue() as Double
Dim Antwort as String = Sende(GibWert)
Dim Value as Double = -9999
If Antwort <> nothing then Value= cdbl(Antwort)
Return Antwort
end function
Function Sende as String
Synclock Comport
With comport
.write(Befehl)
Dim Antwort as string = .readto(crhw(13))
Return Antwort
end synclock
End function
Gibt es eine Möglichkeit den Zugriff auf Variablen oder Funktionen/subs zu
Synchronisieren? Oder kennt jemand vielleicht andere Möglichkeiten um
ein solches Problem zu lösen?
ich grüble nun schon geraume Zeit an einer
Variante, wie ich Geräte permanent über die serielle Schnittstelle
abfragen kann. Gelöst habe ich dies bisher mittels eines eigenen Threads
in der Geräteklasse welcher zwischen 2 und 5 Subs bzw. Funktionen
permanent nacheinander aufruft und bei sich ändernden Werten dies
mittels Event mitteilt. Die serielle Schnittstelle ist dabei via
Synclock entsprechend gesperrt.
Beispiel:
Die Funktion ReadValue liest einen Wert vom Gerät. Die Funktion kann sowohl vom User
als auch von einem Thread ausgeführt werden. Wenn nun jedoch der User
ReadValue aufruft und gleichzeitig der Thread diese Funktion bearbeitet,
könnte es vorkommen das Variablen innerhalb der Funktion einen
undefinierten Zustand erhalten.
Vereinfacht und ohne Fehler abzufangen zB. so:
Function ReadValue() as Double
Dim Antwort as String = Sende(GibWert)
Dim Value as Double = -9999
If Antwort <> nothing then Value= cdbl(Antwort)
Return Antwort
end function
Function Sende as String
Synclock Comport
With comport
.write(Befehl)
Dim Antwort as string = .readto(crhw(13))
Return Antwort
end synclock
End function
Gibt es eine Möglichkeit den Zugriff auf Variablen oder Funktionen/subs zu
Synchronisieren? Oder kennt jemand vielleicht andere Möglichkeiten um
ein solches Problem zu lösen?