Thema: Delphi Thread regiert nicht

Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#2

Re: Thread regiert nicht

  Alt 10. Sep 2006, 10:53
Glückwunsch, du hast herausgefunden warum das Arbeiten mit Threads nicht-trivial ist. Du hast Deadlocks erzeugt. Was ich dir raten kann ist, deine komplette Architektur zu überdenken. Denn du mischst hier blockierend und nichtblockierend ...

Beispiel: niemand hindert dich für jeden Request einen neuen Thread (i.e. neue Instanz deiner Threadklasse) zu erzeugen. Du arbeitest hier scheinbar statisch mit einem Thread. Es wäre beispielsweise möglich, daß du 3 Typen (Klassen) von Threads definierst, welche für jeweils eine Aktion zuständig sind. Dann übergibst du dem ersten Thread in der Reihe ein Objekt (oder Struktur) in der Statusinfos gespeichert sind. Beispielsweise würde ich dort das Hauptfenster-Handle speichern, eine Critical Section sowie andere Infos die für dich wichtig sind (wo in meiner Abarbeitung bin ich).

Bspw. Klassen:
- TConnectThread
- TDisconnectThread
- TGetThread

Jeder dieser Threads darf 2 Integers als Statusinformation via PostMessage an das Hauptfenster schicken, so daß du den aktuellen Status anzeigen kannst ohne den Thread anhalten zu müssen. Hat ein Thread seine Aktion erledigt, gibt er die Struktur an den nächsten Thread (connect -> disconnect -> get) weiter.

Am besten solltest du aber die Anzahl der Threads jeder Klasse begrenzen um sicherzustellen, daß es keine Probleme gibt. Dazu hältst du einen Ringpuffer mit deinen Strukturen und jede der Strukturen hat (Critical Section o.ä.) ein Lock. Sobald ein nueer Request eintrifft, wird das Lock gehalten und erst die letzte Threadklasse kann das Lock freigeben. Die Übergabe der Requests muß dann natürlich über eine Art Dispatcher-Thread erfolgen, damit du nicht schon beim Einreihen wieder unfreiwillig blockierst.
  Mit Zitat antworten Zitat