AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

WorkerThread erweitern

Ein Thema von SvB · begonnen am 26. Okt 2010 · letzter Beitrag vom 27. Okt 2010
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 11:15
Jetzt habe ich mir mal TCriticalSection angesehen und in der Delphi Hilfe steht folgendes:
Zitat:
Mit TCriticalSection können Operationen abgesichert werden, die nicht durch den Ausführung eines bestimmten Codeabschnitts durch einen anderen Thread unterbrochen werden dürfen. Kritische Abschnitt arbeiten wie Gates, die jeweils nur einen einzelnen Thread durchlassen. Da die Ausführung anderer Threads blockiert wird, verringert sich die Leistung der Anwendung erheblich, wenn kritische Abschnitte zu häufig eingesetzt werden.
Das bedeutet, dass wenn mein JobB gestartet werden würde, dass die anderen Threads dann solange unterbrochen werden, bis der JobB abgearbeitet ist. Das wäre schlecht, denn die anderen Threads sollen in dieser Zeit noch JobA und JobB abarbeiten.

Dann schaue ich mir mal das nächste an.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 13:02
Das bedeutet, dass wenn mein JobB gestartet werden würde, dass die anderen Threads dann solange unterbrochen werden, bis der JobB abgearbeitet ist. Das wäre schlecht, denn die anderen Threads sollen in dieser Zeit noch JobA und JobB abarbeiten.
Nein, das bedeutet es nicht. Es bedeutet, daß alle Jobs die sich den kritischen Abschnitt teilen jeweils nur einzeln ausgeführt werden. Zusätzlich ist zu bemerken, daß du eben TryEnter... und nicht Enter... benutzen solltest.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 22:12
Ich habe mich heute fast den ganzen Tag mit meinem Problem beschäftigt. Zuerst habe ich mit Mutex probiert, da sind aber andauernd Fehler gekommen und ich habe es irgendwie nicht rihtig verstanden. Dann habe ich mit CriticalSection und TryCiritcalSection beschäftigt, aber irgendwo hat mir auch da de Ansatz gefehlt.

Ich habe aber jetzt eine Lösung gefunden, die auch anscheinend funktioniert und ich glaube, dass ich es anders nicht hinbekommen hätte. Mit meiner aktuellen Lösung kann ich sogar einem Job mitteilen, wie oft er gleichzeitig ausgeführt werden soll, z.B. sage ich meinem JobA nichts, dann kann er beliebig oft ausgeführt werden, meinem JobB sage ich 2, dann wird er bei 10 Threads nur 2 mal gleichzeitig ausgeführt.
Ich habe das über eine zusätzliche TThreadList gemacht, in der ich die aktuell ausgeführten Jobs hineinlege.

Wen es interessiert, ich habe den Quellcode und das Beispiel beigefügt. Ich habe es unter Delphi XE angepasst und getestet.
Angehängte Dateien
Dateityp: zip WorkerThreadSvB.zip (92,3 KB, 35x aufgerufen)
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz