AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Synchronize, TCriticalSection oder sonst was???
Thema durchsuchen
Ansicht
Themen-Optionen

Synchronize, TCriticalSection oder sonst was???

Ein Thema von romber · begonnen am 9. Sep 2004 · letzter Beitrag vom 9. Sep 2004
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 18:22
Hallo!

Ich erstelle in meinem Programm zwei verschiedene Threads. Beide Threads benutzen eine globale Funktion, die unter anderem Items in TListBox und TStringList hinzufügt. Die Threads werden mehrmals erstellt und warten in einer While-Shleife auf Terminate-Befehl. Das Hauptprogramm verwendet die o. g. VCL-Komponenten nur zum lesen. Den Zugriff von Threads auf VCL muss ich doch synchronisieren, oder? Was ist in meinem Fall richtig?

A) Die Funktion weiterhin wie o. g. aufrufen
B) Für jeden Thread eine Thread-eigene Funktion erstellen und den Berreich, in dem die Items hinzufügt werden, synchronisieren. Dann muss ich aber den Berreich in eine separate Procedure packen, um Synchronize aufrufen zu können, oder?
C) Das ganze wie in B, aber mit einer global definierter TCriticalSection und ohne separaten Procedure
D) Keine der Varianten. Was denn nun?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 18:36
eine criticalsection dürfte imho reichen, und zwar solltest du den vorgang wenn du die items in die listbox hinzufügst in die criticalsection packen da sonst wenn zwei threads gleichzeitig schreiben eine accessviolation entstehen wird.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 19:56
jep und zwar eine section für beide threads !

nicht jedem thread eine section geben.. das wäre dann wie ein ferrari ohne reifen
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 20:11
Zitat von supermuckl:
jep und zwar eine section für beide threads !

nicht jedem thread eine section geben.. das wäre dann wie ein ferrari ohne reifen
Ich kann diese doch in der Mainform beim definieren und im OnCreate des Forms erstellen, oder?
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 20:47
jep

müssen halt global sein die critical section(s)

weil erst wenn du mit 2 unterschiedlichen thread instanzen mit ein und derselben section synchronisierst funzt die sync
ansonsten kümmert sich die eine section um den einen thread und die andere um den anderen und dann ist nix gewonnen und es knallt beim gemeinsamen zugriff auf VCL objekte

( globale variablen müssen wohl nicht synchronisiert werden (a la Luckies thread irgendwo im board) )

also eine section createn

und beide oder halt mehrere threads dann damit synchronisieren lassen

thread xyz:

section.enter;
form1.listbox1.items.add bla bla
section.leave;
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 21:15
Zitat von supermuckl:
globale variablen müssen wohl nicht synchronisiert werden
Ich weiß nicht ob es muss. Aber Delphi stellt dafür doch TMultiReadExclusiveWriteSynchronizer zur Verfügung.
Den benutze ich, wenn ich mit mehreren Thread's eine Variable lese und schreibe.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 21:37
Zitat von Sprint:
Ich weiß nicht ob es muss. Aber Delphi stellt dafür doch TMultiReadExclusiveWriteSynchronizer zur Verfügung.
Den benutze ich, wenn ich mit mehreren Thread's eine Variable lese und schreibe.
Auch für globale Integer-Variablen, wenn mehrere Threads den Wert ändern? Welchen Vorteil hat die TMultiReadExclusiveWriteSynchronizer gegenüber TCriticalSection?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Synchronize, TCriticalSection oder sonst was???

  Alt 9. Sep 2004, 21:39
wie der name des teils schon sagt regelt es dass mehrere threads die variable lesen, aber nur einer gleichzeitig ändern kann.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:18 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