![]() |
Threadsynchronisation
Hallo!
Ich hab ne kleine Frage zur Threadsicherheit, hab das net so ganz verstanden. Wenn ich zb im Hauptthrad auf eine Listbox zugreife (zb Lines.Add) und das auch in einem Thread mache, dann kann das ja zu Problemen führen. Aber wie ist das, wenn ich nur in einem Thread (nicht der Hauptthread) auf die ListBox zugreife und sonst nicht. Kann das auch zu Problemen führen? Und wie ist es mit Lesen? kann ich in einem Thread zb auslesen ob eine ListBox Enabled ist oder sollte ich dafür auch Synchronize benutzen? Danke schonmal! Grüße blablab |
Re: Threadsicherheit
Zitat:
Zitat:
Grüße, Messie [Edit]ich hab' mich ein wenig gewundert, warum vor mir niemand geantwortet hat. Der Titel "Threadsicherheit" trifft nicht ganz das Thema. Threadsynchronisation ist der Begriff: wie kann ich vermeiden, dass zwei Threads gleichzeitig auf etwas zugreifen und sich dann den Kopf aneinander stoßen[/Edit] |
Re: Threadsicherheit
Du MUSST dafür Synchronize nutzen. Alle Interaktionen mit der VLC müssen über den Hauptthread erledigt werden, deswegen Synchronize.
|
Re: Threadsicherheit
ohje, da komm ich mit neuen methoden und neuen globalen variablen erstellen gar net hinterher...
gibt es da nicht eine möglichkeit mir Synchronize auch parameter zu übergeben? und nochmal zum verständnis, ich kann mir das irgendwie nicht vorstellen... wie kann es denn vorkommen, dass während ich zb nen integer aulese, der verändert wird? Der integer wird doch in einem Schritt hingeschrieben und nicht erst die erste hälte und dann die zweite hälfte des integers. wie kann dann da n fehler auftreten? |
Re: Threadsicherheit
Zitat:
Für Integer-Variablen braucht man aber nicht gleich zu Synchronize greifen. Hierfür gibt es die Interlock-Funktionen. InterlockIncrement, InterlockDecrement, InterlockExchange (kann man für die Zuweisung "misbrauchen"), ... Des weiteren gibt es noch CriticalSections. Nur wenn man irgendwas mit der VCL (TForm, TControl, ...) anstellt ist der Weg über Synchronize notwendig, weil sämtliche Zugriffe auf Window-Handles, dank der Thread-Affinität, im Hauptthread/VCL-Thread auszuführen sind. |
Re: Threadsynchronisation
Delphi sorgt bereits für korrektes ALignment (solange man kein packed o.Ä. verwendet), sodass es keine Probleme geben sollte, wenn ein Integer nur von einem Thread beschrieben wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr. |
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 by Thomas Breitkreuz