AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Multi/Dualthreading - Laufzeit: Strings Thread -> VCL
Thema durchsuchen
Ansicht
Themen-Optionen

Multi/Dualthreading - Laufzeit: Strings Thread -> VCL

Ein Thema von xZise · begonnen am 20. Mär 2008 · letzter Beitrag vom 20. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#11

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

  Alt 20. Mär 2008, 20:11
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 von Dax:
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;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#12

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

  Alt 20. Mär 2008, 20:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

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

  Alt 20. Mär 2008, 20:30
Immer, bei Enter und Leave?

MfG
xZise

PS: Ich habe mich noch nicht so sehr mit Multi-/Dualthreading beschäftigt
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#14

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

  Alt 20. Mär 2008, 20:52
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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#15

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

  Alt 20. Mär 2008, 21:24
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.
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