Seite 1 von 1

5s Bug in shared library

Verfasst: 21 Dez 2020, 17:32
von elektrofuzzis
Hallo ft-Team,

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;} 
  } 
RoboPro Testprogramm #1
testcase1.png
testcase1.png (23.26 KiB) 2232 mal betrachtet
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
testcase2.png
testcase2.png (37.88 KiB) 2232 mal betrachtet
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

Re: 5s Bug in shared library

Verfasst: 06 Feb 2021, 15:43
von fite-Team
Guten Tag Herr Fuss,

wir leiten dieses Problem an unseren ROBOPro Spezialisten weiter in der Hoffnung, dass er eine Antwort darauf geben kann.

Freundliche Grüße
das fischertechnik Team