![]() |
Re: Workerthread: Der Diener im Hintergrund
Sag mal, dein 'P4 HT' hat Hyperthreading? Hmmm. Dann gibt es vermutlich irgendwo einen Konflikt, bzw. einen Deadlock, der bei Einprozessorsystemen nicht auftritt.
Zitat:
Funktioniert denn der 'Terminate' Button? Kannst Du danach weiter testen oder hängt dann die SW wieder? Der Terminate-Button ruft 'Free' auf und instantiiert den Pool anschließend neu. Was siehst Du eigentlich im Memo, wenn Du die Anwendung beendest? |
Re: Workerthread: Der Diener im Hintergrund
Zitat:
Auf dem einen PC rasen die Threads einfach nur so durch (Uni-Proz). Auf dem anderen dauert es ca. 1 Sek. pro Thread. Der Effekt tritt auch nur in der Pool-Variante auf. Wenn ich das Prog aus der IDE starte, dauert es fast 2 Minuten, bis es mit der Initialisierung fertig ist. Der normale Worker funktioniert auf beiden Systemen sauber ! Zitat:
Zitat:
Bei einer Anwendung die hängt, passiert halt nicht viel. Es gibt seltsamer Weise auch keinen Log von Eurekalog. Laut Taskmanager liegt WorkerThreadPoolDemo auch nur gelangweilt in der Gegend rum. |
Re: Workerthread: Der Diener im Hintergrund
Hi kalmi01,
Schön, das Du Dir die Zeit nimmst. Ich erwarte bei der Pool-Demo, das alle 500 ms die Threads quasi gleichzeitig den nächsten Job ausführen. Denn der Job besteht ja nur aus einem 'Sleep(500)' und 'Log ins Memo'. Wenn das auf dem HT-PC anders abläuft, dann wundert mich das (ich würde sogar postulieren, das Du ein anderes Programm ausführst :stupid: ) Was die Ausgabe anbelangt, bezog ich mich auf das Testprog, das ich Dir per PN zugeschickt habe. Eine neue Version mit Testausgaben (per Kompilerdirektive abschaltbar) ist im 1.Post |
Re: Workerthread: Der Diener im Hintergrund
Zitat:
Mit dem neuen Source von Dir funktioniert es einwandfrei :thumb: Der neu eingestellt Source hat 24 Unterschiede in der csWorkerThreadPool.pas, gegenüber dem per PN geschickten. |
Re: Workerthread: Der Diener im Hintergrund
Na, Schlamperei meinerseits (und wie gesagt: Da war noch so eine Kleinigkeit :oops: )
Also, heute abend mach ich den Code nochmal sauber, kommentiere es noch ausführlich (wenn mir noch etwas einfällt) und stell eine überarbeitete Version hier ein. Danke für die Geduld und die Tipps! |
Re: Workerthread: Der Diener im Hintergrund
Moin moin,
ich denke ich habe noch eine Kleinigkeit gefunden?! Sollte es jetzt nicht in TWorkerThreadPool einen Setter für fOnJobException geben? Also ähnlich wie SetOnAction... Dann hab ich noch ne Frage: Angenommen, ich habe verschiedene Jobs die DB-Abfragen o.ä. erledigen. Nach meinem Verständnis muss ich in jedem Job die TADOConnection erstellen. Hab ich das jetzt richtig verstanden oder langt es, wenn ich Sie einmal in z.B. einem Datenmodul einzufüge? (Wenn ja, dann hätte ich dafür gerne eine Erklärung) |
Re: Workerthread: Der Diener im Hintergrund
Hi x000x,
Super! Da fehlte wirklich der Setter, der das Event an die einzelnen Threads weiterleitet... ist eingebaut. ADO verwendet COM, und COM ist nicht ohne Weiteres threadübergreifend. Die Interfaces sind nur im Thread gültig. Willst Du sie einem anderen Thread zur Vergfügung stellen, musst Du sie über den Marshaller übergeben (ab in einen Stream, raus aus einem Stream). Irgendwie so. ADO verwaltet jedoch einen Connection-Pool, der das vermutlich alles regelt. Denk dran: TMyJob.UsesCOMObjects muss bei Verwendung von ADO auf True gesetzt werden, damit CoInitialize aufgerufen wird. |
Re: Workerthread: Der Diener im Hintergrund
Moin moin,
Zitat:
Ich hätte da mal einen Vorschlag: Schreib doch beim Download in den Kommentar, von wann die Version ist :stupid: Edit: Uuund ? Wo bleibt die Korrektur ? :mrgreen: |
Re: Workerthread: Der Diener im Hintergrund
Zitat:
|
Re: Workerthread: Der Diener im Hintergrund
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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 by Thomas Breitkreuz