Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads Frage zu CriticalSections (https://www.delphipraxis.net/22127-threads-frage-zu-criticalsections.html)

Gambit 12. Mai 2004 18:58


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

Jacki O 12. Mai 2004 19:24

Re: Threads Frage zu CriticalSections
 
Hallo,

ich mache das so:
Code:
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;
Gruß Jacki

Gambit 12. Mai 2004 19:46

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

Luckie 12. Mai 2004 22:37

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.

Gambit 13. Mai 2004 09:04

Re: Threads Frage zu CriticalSections
 
Das stimmt, kann aber in meinem verwegenen Programm eigentlich nicht passieren.

Danke!!

Gambit

Luckie 13. Mai 2004 09:21

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. :?

SirThornberry 13. Mai 2004 09:25

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

Luckie 13. Mai 2004 09:37

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....

Gambit 13. Mai 2004 09:43

Re: Threads Frage zu CriticalSections
 
nein, ist MySQL. Weiß aber nicht, ob das da besser läuft.

Gruß

Gambit

sakura 13. Mai 2004 09:49

Re: Threads Frage zu CriticalSections
 
Eigentlich sollte die Datenbank selbst "thread-safe" sein. Warum meinst Du überhaupt CriticalSections zu benötigen?

...:cat:...


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

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