Funktions Aufrufe in Threads

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
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 , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

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.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
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