Einzelnen Beitrag anzeigen

Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#11

Re: Array in Thread übergeben

  Alt 7. Jun 2005, 17:26
Hallo, ich hab noch mal ne Frage zur Übergabe von Variablen zwischen 2 Threads. Ich habe es mit Synchronize gemacht, und ihr habt mir geraten es mit CriticalSections zu machen. Habe in der Delphi Hilfe nachgelesen:

Zitat:
Mit TCriticalSection können Operationen abgesichert werden, die nicht durch den Start eines anderen Threads unterbrochen werden dürfen. Kritische Abschnitt arbeiten wie Gates, die jeweils nur einen einzelnen Thread durchlassen. Da die Ausführung aller anderen Threads blockiert wird, verringert sich die Leistung der Anwendung erheblich, wenn kritische Abschnitte zu häufig eingesetzt werden.

Kritische Abschnitte müssen einen globalen Gültigkeitsbereich besitzen, damit sie für alle Threads zur Verfügung stehen. In jedem Thread sollten Aktionen, die die Ausführung der durch TCriticalSection geschützten Operationen stören könnten, nur nach dem Aufruf der Methode Acquire oder Enter stattfinden. Threads, die für wichtige Operationen TCriticalSection nicht verwenden, können Fehler verursachen.
Mich stört daran, folgender Teilsatz: "verringert sich die Leistung der Anwendung erheblich, wenn kritische Abschnitte zu häufig eingesetzt werden."

Ich habe in meiner Anwendung 2 Threads, welche die ganze Zeit laufen. Der eine ließt Daten ein und der Andere schreibt diese anschließend in eine Datei, somit habe ich nie ein gleichzeitiges schreiben auf die Daten. Ich bekomme so ca. 130Telegramme pro ms, deshalb meine Frage ob ich CriticalSections benutzen soll. Ich will nicht, dass ein Thread den anderen sperrt, da dieser schön die Daten weiter einlesen soll (sonst könnte ich mir das ganze auch schenken mit 2Threads).

Zu Synchronize steht folgendes in der Hilfe:

Zitat:
Beschreibung

Synchronize löst den Aufruf einer bestimmten Methode aus, die vom VCL-Haupt-Thread ausgeführt werden soll. Durch dieses indirekte Verfahren werden Konflikte in Multithread-Anwendungen vermieden. Wenn Sie nicht sicher sind, ob ein Methodenaufruf Thread-sicher ist, rufen Sie die Methode vom VCL-Haupt-Thread aus auf, indem Sie sie an die Methode Synchronize übergeben.

Der Thread wird unterbrochen, während die angegebene Methode ausgeführt wird.

Hinweis

Unsichere Methoden können Sie auch durch kritische Sektionen oder mit Hilfe eines Synchronisierers, der mehrfaches Lesen, aber nur exklusives Schreiben zuläßt, schützen.
Hieran verstehe ich nicht, was sind denn "Unsichere Methoden"??
  Mit Zitat antworten Zitat