Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TThread.Synchronize prophylaktisch verwenden (https://www.delphipraxis.net/216801-tthread-synchronize-prophylaktisch-verwenden.html)

himitsu 5. Mär 2025 11:44

AW: TThread.Synchronize prophylaktisch verwenden
 
Wenn ALLE Codes, welche auf das Gleiche zugreifen, im Hauptthread (bzw. immer nur im selben Thread) werkeln, dann wäre es quasi sicher, da immer nur Einer gleichzeitig kann.

Eine Alternative wären z.B. CriticalSections, damit auch zwischen mehreren Threads immer nur Einer kann.

Mavarik 5. Mär 2025 11:54

AW: TThread.Synchronize prophylaktisch verwenden
 
Zitat:

Zitat von bernau (Beitrag 1546812)
wenn Thread.Synchronize nicht innerhalb eines Threads aufgerufen wird sondern im Hauptthread.

Kannst Du testen mit:

Delphi-Quellcode:
if Windows.GetCurrentThreadId = MainThreadID then


Mavarik :coder:

bernau 5. Mär 2025 12:13

AW: TThread.Synchronize prophylaktisch verwenden
 
Zitat:

Zitat von Mavarik (Beitrag 1546832)
Zitat:

Zitat von bernau (Beitrag 1546812)
wenn Thread.Synchronize nicht innerhalb eines Threads aufgerufen wird sondern im Hauptthread.

Delphi-Quellcode:
if Windows.GetCurrentThreadId = MainThreadID then

Mit dieser Abfrage bin ich aber Plattformabhängig (Windows).

Aber wie ich schon gelernt habe, kontrolliert Thread.Synchronize selber, ob er sich im Mainthread befindet.

himitsu 5. Mär 2025 12:45

AW: TThread.Synchronize prophylaktisch verwenden
 
Vieles in der Windows.pas ist inzwischen auch für andere Platformen verfügbar.

Delphi-Quellcode:
if Windows.GetCurrentThreadId = TThread.CurrentThread.ThreadID then
,
aber TThread.Current, bzw. TThread.CurrentThread ist selbst schon irgendwie pervers,
um damit nur auf die ID zureifen zu wollen.

jaenicke 5. Mär 2025 12:47

AW: TThread.Synchronize prophylaktisch verwenden
 
Du kannst dir auch TThread.Current bei der Zuweisung deiner Notifier merken und bei TThread.Synchronize statt nil übergeben. Das kommt auf deine Threadarchitektur an. Voraussetzung wäre ja, dass der andere Thread entsprechend lange existiert. Dann müsste das aber nicht der Hauptthread sein, den du mit nil ansprichst.

Threads kannst du wirklich auf sehr viele Arten verwenden. Wichtig ist, dass du einen Plan hast, wann welcher Thread gestartet und beendet wird, was in welchem Kontext ausgeführt werden muss, welcher Kontext wie lange lebt, und wer sich um die Beendigung deiner Threads kümmert. Teilweise wird dir das abgenommen (Tasks, PPL, anonyme Threads, ...), teilweise musst du das alles manuell machen (TThread, ...).

Mavarik 5. Mär 2025 16:32

AW: TThread.Synchronize prophylaktisch verwenden
 
Zitat:

Zitat von bernau (Beitrag 1546834)
Mit dieser Abfrage bin ich aber Plattformabhängig (Windows).

Seit wann machst Du FMX?

Stevie 5. Mär 2025 17:08

AW: TThread.Synchronize prophylaktisch verwenden
 
FWIW
Delphi-Quellcode:
GetCurrentThreadId
für "nicht-Windows" ist definiert in Posix.Pthread.pas

bernau 6. Mär 2025 07:58

AW: TThread.Synchronize prophylaktisch verwenden
 
Zitat:

Zitat von Mavarik (Beitrag 1546854)
Zitat:

Zitat von bernau (Beitrag 1546834)
Mit dieser Abfrage bin ich aber Plattformabhängig (Windows).

Seit wann machst Du FMX?

Erst mal die diversen Bibliotheken vorbereiten und alles was nichts mit der GUI zu tun hat plattformunabhängig machen.

Ist noch ein weiter Weg. Kennst du ja ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz