![]() |
Threads Frage zu CriticalSections
Moin;
ich habe eine Form, von der ich 2 Threads starten will. Die Threads sind in einer weiteren Unit definiert. In jedem Thread erfolgen Zugriffe auf die gleiche Datenbank. Ich nehme an, dass ich diese Zugriffe in CriticalSections packen muss. Ich weiß aber nicht genau, wie ich das anstellen muss. Kann ich eine Variable zB. "var csVariable: TCriticalSection" definieren und wenn ja, wo genau? Muss ich dann irgendwo "csVariable.create" hinpacken, also instanziieren, wenn ja, wo? Und dann in den Execute-Methoden der Threads vor den Datenbankzugriffen "csVariable.enter" und dahinter "csVariable.leave" packen? Oder wie geht das nun? Gruß Gambit |
Re: Threads Frage zu CriticalSections
Hallo,
ich mache das so:
Code:
Gruß Jacki
var CS_MYSection : TRTLCriticalSection; //Globale Variable
procedure TForm1.StartThread; begin // MyThread erzeugen,starten end; initialisation InitializeCriticalSection(CS_MYSection); finalization DeleteCriticalSection(CS_MYSection); ... procedure MyThread.Execute; begin EnterCritcalSection(CS_MYSection); //Hier der Code, den der Thread ausführen soll LeaveCriticalSection(CS_MYSection); end; |
Re: Threads Frage zu CriticalSections
Jetzt kennt die Unit mit den Threads "EnterCritcalSection" nicht(undefinierter Bezeichner), hab irgendwie nen Brett vorm Kopp...
...blödsinn, war ein Paste und Copy Fehler...sorry wobei das Ganze doch irgendwie doch alles Schwachsinn ist, was ich in meiner Frage gestellt hab', warum sollte ich nicht in zwei Threads einfach auf die gleiche Datenbank zugreifen können... :oops: Gambit |
Re: Threads Frage zu CriticalSections
weil wenn der eine Thread einen DS ändert und der zweite gleichzeitg selben DS ausliest er nur Datenmüll auslesen könnte. Es könnte auch Probleme geben, wenn beide gleichzeitig in die DB schreiben wollen.
|
Re: Threads Frage zu CriticalSections
Das stimmt, kann aber in meinem verwegenen Programm eigentlich nicht passieren.
Danke!! Gambit |
Re: Threads Frage zu CriticalSections
Wenn du meinst. :roll: Sag abert bitte Bescheid wie es heißt, bevor du es veröffentlichst, damit ich der Datenbanke keine wichtigen Daten anvertraue. :?
|
Re: Threads Frage zu CriticalSections
@luckie: eine ordentliche datenbank sollte auch zurecht kommen wenn mehrere verbindungen bestehen - und wenn das proggy das absichert das da nicht gleichzeitig gelesen und geschrieben wird bzw. sich das nicht gegenseitig stört ist doch alles ok
|
Re: Threads Frage zu CriticalSections
Schon klar, aber von der BDE habe ich da nicht all zu viel positives in dieser Beziehung gehört und eventuell besteht seine DB ja aus einer typisierten Datei oder so was....
|
Re: Threads Frage zu CriticalSections
nein, ist MySQL. Weiß aber nicht, ob das da besser läuft.
Gruß Gambit |
Re: Threads Frage zu CriticalSections
Eigentlich sollte die Datenbank selbst "thread-safe" sein. Warum meinst Du überhaupt CriticalSections zu benötigen?
...:cat:... |
Re: Threads Frage zu CriticalSections
hatte ich ja oben schon mal erwähnt, dass ich mittlerweile nicht mehr glaube, CriticalSections zu benötigen. War wohl eine, auf meinem fortgeschrittenem Alter beruhende, Dummüberlegung. Hab' mich sowieso schon manchmal gefragt, warum ich hier im Forum nicht schon die rote Karte bekommen habe wegen mangelndem Verständnis der Programmiertechnik...
Gruß Gambit |
Re: Threads Frage zu CriticalSections
Ja, OK, die sollte threadsafe sein.
|
Re: Threads Frage zu CriticalSections
[OT]
Zitat:
[/OT] ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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-2025 by Thomas Breitkreuz