Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Multi/Dualthreading - Laufzeit: Strings Thread -> VCL (https://www.delphipraxis.net/110607-multi-dualthreading-laufzeit-strings-thread-vcl.html)

xZise 20. Mär 2008 19:11

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
 
Zitat:

Zitat von Dax
Genau das ist der Sinn der Critical Sections: man kommt erst dann rein, wenn alle anderen draussen sind - in der Zwischenzeit wartet man darauf, reinzukommen. Bei meinem Beispiel sind die Zeiten innerhalb der CS allerdings so kurz, dass man sich darum keine Gedanken machen muss :)

Aber theoretisch, wenn das jetzt mehr als kurz wäre.
Ich dachte an so was:
Code:
wenn <Critical>.KannBetreten dann
beginne
  <Critical>.Betrete;
  ...
  <Critical>.Verlasse;
beende
Zitat:

Zitat von Dax
Zitat:

Zitat von xZise
PS: Meine Hilfe funktioniert gerade nicht: Welche Unit ist CriticalSection?

SyncObjs glaub ich heisst die...

Danke :) Richtig :)

MfG
xZise

Edit #1
PS: Es gibt die Funktion "TryEnter". Scheiße! Warum funktioniert die Hilfe nicht. Tuts damit? Und reicht dann das?
Delphi-Quellcode:
procedure TSearchThread.SetFile(AFile: string);
begin
  if FCritical.TryEnter then
  begin
    FFile := AFile;
    FCritical.Leave;
  end;
end;

Dax 20. Mär 2008 19:16

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
 
Zitat:

Zitat von xZise
Edit #1
PS: Es gibt die Funktion "TryEnter". Scheiße! Warum funktioniert die Hilfe nicht. Tuts damit? Und reicht dann das?
Delphi-Quellcode:
procedure TSearchThread.SetFile(AFile: string);
begin
  if FCritical.TryEnter then
  begin
    //try
    FFile := AFile;
    //finally
    FCritical.Leave;
    //end;
  end;
end;

Ja, das müsste funktionieren - allerdings solltest du den kommentiert eingefügten Resourcenschutzblock immer dazuschreiben.

xZise 20. Mär 2008 19:30

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
 
Immer, bei Enter und Leave?

MfG
xZise

PS: Ich habe mich noch nicht so sehr mit Multi-/Dualthreading beschäftigt :)

Dax 20. Mär 2008 19:52

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
 
Zitat:

Zitat von xZise
Immer, bei Enter und Leave?

Ja, immer, wenn du Resourcen holst und wieder freigeben musst - und ja, ich hab' sie vorhin auch vergessen. Wenn dein CS-Code eine Exception wirft, kommt es nie zum Leave, also kann kein Thread je wieder in diese CS eintreten, solange das Programm läuft.

Apollonius 20. Mär 2008 20:24

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
 
So, ich melde mich auch mal wieder: Ich finde es irgendwie aus Prinzip besser, dem Hauptthread zu signalisieren, dass er etwas tun soll, als dass dieser ständig prüft, ob es neue Daten gibt.
Die neue SetFile-Implementierung würde ich umbenennen und nicht als Zugriffsroutine für das Property verwenden. Es widerspricht irgendwie dem Sinn eines Setters, wenn das Feld nur manchmal gesetzt wird. Das war mein kurzer Kommentar zum Thema "saubere Programmierung". :)

Um eines klarzustelen: Dieser Beitrag sollte nicht als "Meckerei" an Dax' Vorschlag verstanden werden. Es steht natürlich jedem frei, die Methode zu verwenden, die er für besser hält.


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

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