Autor Beitrag
svenson08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 87



BeitragVerfasst: Fr 06.06.03 09:32 
Hallo zusammen,

ich hab ein Problem beim anwenden von Threads. Und zwar erzeuge ich auf dem Hauptfenster auf drücken eines Buttons mehrere 100te kleine Images. Da genau das viel Zeit beansprucht hab ich diese aufgabe 2 Thread übergeben. Der 1. Thread erzeugt Image 1-50 , der 2. 51-100, dann der 1. wieder 101 -150 und soweiter. Damit die Threads Images auf dem Hauptfenster erstellen können, muß ich das mit Synchronize tun.
Dabei gibt es dann ein Problem, der Thread erzeugt über Synchronize das Image auf dem Hauptfenster, und erstellt erst das nächste image wenn die Procedure über Synchronize fertig ist. Selbst wenn nur 1 Thread dies tut ist das nicht wirklich ein geschwindigkeit gewinn. Das Problem vermute ich bei dem Synchronize, da der Thread erst auf das Abarbeiten vom Programmthread wartet. Oder versteh ich das irgendwie falsch mit dem Synchronize ?
Ich hoffe ich konnte halbweg verständlich mein anliegen übermitteln.
Wäre toll wenn jemand ein Idee oder einen ander Lösung hätte.

Gruß Sascha
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 06.06.03 09:56 
Synchronize lagert die übergebene Methode in den primären Thread aus. Ein Thread, der nur einen einzigen Aufruf von Synchronize enthält ist also vollkommen sinnlos, da sowieso alles wieder im primären Thread stattfindet.

Abgesehen davon fressen Images extrem viele Resourcen und ein Prog, das gleich mehrere 100 davon erzeugt ist der ultimative Systemkiller!!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
svenson08 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 87



BeitragVerfasst: Fr 06.06.03 10:12 
Lass das mit dem Systemkiller mal bei seite, es geht nur um ein Testprog bei dem ich genau dieses Problem irgendwie umgehen möchte. Bei einer sogroßen Anzahl von Objekten kann man schön beobachten in wie weit etwas mit dem Thread optimiert wurde oder nicht.

Was meinst du damit das ein Thread nur einen einzigen Aufruf von Synchronize enthält ? Über Synchronize rufe ich die Prozedure die eine feste Anzahl von Images erzeugt.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 06.06.03 10:54 
Post mal den Source deines Threads, dann erklär ich dir genau den Programmablauf der 2 Threads...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Fr 06.06.03 10:56 
Hi,

was Motzi Dir sagen möchte ist, dass es sinnlos ist, wenn Dein Thread nichts anderes macht als mit Synchronize eine Prozedur aus dem Hauptthread aufzurufen. Da wäre der Thread nämlich überflüssig, da ja Synchronize die Methode in den Hauptthread verlagert.

MFG

- Ernesto -
svenson08 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 87



BeitragVerfasst: Fr 06.06.03 11:12 
Source kann ich gerade nicht geben. Bin leider nicht an meinem PC. Könnt ich aber später nachreichen.

Zitat:
was Motzi Dir sagen möchte ist, dass es sinnlos ist, wenn Dein Thread nichts anderes macht als mit Synchronize eine Prozedur aus dem Hauptthread aufzurufen. Da wäre der Thread nämlich überflüssig, da ja Synchronize die Methode in den Hauptthread verlagert.


Genau darauf bin ich auch gekommen. Nun ist meine Frage eben wie ich mehrere (dutzende) komponenten möglichst schnell auf einem Form erzeugen kann. Ein Thread ist da eigentlich die erste Wahl, nur eben nicht unbedingt in diesem Fall.