Delphi-PRAXiS
Seite 5 von 8   « Erste     345 67     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Workerthread: Der Diener im Hintergrund (https://www.delphipraxis.net/93835-workerthread-der-diener-im-hintergrund.html)

alzaimar 18. Jun 2007 08:16

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:

Zitat von kalmi01
... und ich möchte mal behaupten, das die Version (subjektiv) langsamer ist als der Vorgänger.

Was ist langsamer? Da wird doch nicht viel gemacht?

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?

kalmi01 18. Jun 2007 12:36

Re: Workerthread: Der Diener im Hintergrund
 
Zitat:

Was ist langsamer? Da wird doch nicht viel gemacht?
Das ist mir wohl klar.
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:

Funktioniert denn der 'Terminate' Button?
Ja

Zitat:

Was siehst Du eigentlich im Memo, wenn Du die Anwendung beendest?
Was soll ich denn sehen ?
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.

alzaimar 18. Jun 2007 14:54

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

kalmi01 18. Jun 2007 15:32

Re: Workerthread: Der Diener im Hintergrund
 
Zitat:

Zitat von alzaimar
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:

Da könntest Du nicht ganz unrecht haben :gruebel:
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.

alzaimar 18. Jun 2007 17:45

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!

x000x 19. Jun 2007 01:18

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)

alzaimar 19. Jun 2007 08:05

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.

kalmi01 19. Jun 2007 08:11

Re: Workerthread: Der Diener im Hintergrund
 
Moin moin,
Zitat:

Zitat von alzaimer
Da fehlte wirklich der Setter, der das Event an die einzelnen Threads weiterleitet... ist eingebaut.

Du lügst ja :wink:
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:

alzaimar 19. Jun 2007 09:02

Re: Workerthread: Der Diener im Hintergrund
 
Zitat:

Zitat von kalmi01
Ich hätte da mal einen Vorschlag: Schreib doch beim Download in den Kommentar, von wann die Version ist :stupid:

Das würde ein Mindestmaß an Planung und Ordnung bedeuten. Das liegt außerhalb meiner Möglichkeiten. :freak:

kalmi01 19. Jun 2007 10:03

Re: Workerthread: Der Diener im Hintergrund
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von kalmi01
Ich hätte da mal einen Vorschlag: Schreib doch beim Download in den Kommentar, von wann die Version ist :stupid:

Das würde ein Mindestmaß an Planung und Ordnung bedeuten. Das liegt außerhalb meiner Möglichkeiten. :freak:

Das Genie beherrscht das Chaos :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Seite 5 von 8   « Erste     345 67     Letzte »    

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