5s Bug in shared library
Verfasst: 21 Dez 2020, 17:32
Hallo ft-Team,
bei der Verwendung von shared libraries bin ich auf ein stranges Verhalten gestoßen.
shared library libTest.cpp:
RoboPro Testprogramm #1
Das Testprogramm setzt die Variable "int" auf den Wert 42 für 3s, danach für 1s auf 0 und beginnt wieder von vorn. ->Ok
Setzt man den ersten Timer auf 4s (so dass in Summe zwischen den beiden getShort-Calls >=5s Zeit vergeht), dann funktioniert der erste Aufruf von getShort, jeder weiter Aufruf liefert 0. Schreibt man in der c-Library bei jedem Aufruf in ein Logfile, so ist im Fall von <5s jeder Aufruf gelogged, ab 5s wird nur der erste Aufruf gelogged.
Die C-Aufrufe arbeiten mit Ganzahlwerten, LockInterface ist angeclickt.
RoboPro Testprogramm #2 Baut man nun einen zweiten Thread, der nur regelmäßig eine Funktion der so-Lib aufruft und dies häufiger macht, so bleibt der Thread an dem getShort-Aufruf hängen, der den Aufruf zeitlich als "zweiter" macht. In diesem Fall der rechte Thread.
Schalte ich LockInterface aus, dann funktionieren beide Threads.
Wo liegt mein Denkfehler? LockInterface dient doch genau dazu, mit mehreren Threads arbeiten zu können.
Mit freundlichen Grüßen
Stefan Fuss
bei der Verwendung von shared libraries bin ich auf ein stranges Verhalten gestoßen.
shared library libTest.cpp:
Code: Alles auswählen
using namespace std;
extern "C" {
int getDouble(double *x) { *x = 42; return 0;}
}
Setzt man den ersten Timer auf 4s (so dass in Summe zwischen den beiden getShort-Calls >=5s Zeit vergeht), dann funktioniert der erste Aufruf von getShort, jeder weiter Aufruf liefert 0. Schreibt man in der c-Library bei jedem Aufruf in ein Logfile, so ist im Fall von <5s jeder Aufruf gelogged, ab 5s wird nur der erste Aufruf gelogged.
Die C-Aufrufe arbeiten mit Ganzahlwerten, LockInterface ist angeclickt.
RoboPro Testprogramm #2 Baut man nun einen zweiten Thread, der nur regelmäßig eine Funktion der so-Lib aufruft und dies häufiger macht, so bleibt der Thread an dem getShort-Aufruf hängen, der den Aufruf zeitlich als "zweiter" macht. In diesem Fall der rechte Thread.
Schalte ich LockInterface aus, dann funktionieren beide Threads.
Wo liegt mein Denkfehler? LockInterface dient doch genau dazu, mit mehreren Threads arbeiten zu können.
Mit freundlichen Grüßen
Stefan Fuss