Funktions Aufrufe in Threads

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Funktions Aufrufe in Threads

Beitrag 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
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Funktions Aufrufe in Threads

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7035
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Funktions Aufrufe in Threads

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten