Seite 1 von 1

Funktions Aufrufe in Threads

Verfasst: 22.03.2021 11:03
von tft
Hallo

heute mal eine Verständnis Frage. Ich habe mehrere Threads am Laufen. Und einige verwenden die Funktion wie MouseX(). Das ist nur ein Beispiel.
Wenn ich das so mache ... muss ich diesen Aufruf dann auch über einen Mutex sichern? Oder wird das mit der Option "ThreadSave" bei den Compiler Optionen übernommen?
Wenn ja. Sind die Funktionen dann mit einem Lock oder einem TryLock gesichert? Wenn mit einem TryLock ..... was wird dann als Ergebnis zurück geliefert?
Ich denke das ist eine Frage für Fred. Aber mein Englisch ist noch Gruseliger wie mein Geschriebenes Deustch.

Gruss TFT

Re: Funktions Aufrufe in Threads

Verfasst: 22.03.2021 11:13
von NicTheQuick
MouseX ist ja nur ein lesender Zugriff, der auch mit Events nicht am Hut hat. Das solltest du also bedenkenlos in Threads aufrufen können, ganz ohne Locks.

Re: Funktions Aufrufe in Threads

Verfasst: 22.03.2021 12:10
von STARGÅTE
Wenn es sich wirklich genau um MouseX() handelt, dann solltest du aber den Hinweis aus der Hilfe beachten:
Die Mouse-Lib verwendet DirectX und DirectX soll (nach der Hilfe) nicht in Threads verwendet werden.
Das heißt, du solltest MouseX() im Main-Loop aufrufen und den Wert in einer globalen Variable speichern.
Wenn die Threads dann nur lesen, ist ein Lock/Unlock nicht so wichtig.

Noch ein Kommentar zu der ThreadSave-Option:
Diese Kompileroption sogt nur dafür, dass Built-in Funktionen von PureBasic welche in unterschiedlichen Threads verwendet werden, nicht zum Absturz führen, weil sie intern auf gleiche Ressourcen zugreifen, z.B. Strings der der Debugger. Alle Zugriffe die vom Programmierer selbst verursacht werden, müssen immer selber geschützt werden.