Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrere Container für mehrere Threads? (https://www.delphipraxis.net/109347-mehrere-container-fuer-mehrere-threads.html)

TheMiller 28. Feb 2008 15:28

Re: Mehrere Container für mehrere Threads?
 
Ich depp :wall:

Jetzt weis ich wie du das gemeint hast. So mache ich es doch auch mit meinen PlugIns etc.

Ich werde es mal ausprobieren.

Zu dem Form4.Handle. Was wäre denn der Unterschied, außer, dass einmal Form4 fehlt und einmal nicht :wink:

sirius 28. Feb 2008 15:36

Re: Mehrere Container für mehrere Threads?
 
Zitat:

Zitat von DJ-SPM
Zu dem Form4.Handle. Was wäre denn der Unterschied, außer, dass einmal Form4 fehlt und einmal nicht :wink:

Der Unterschied ist derzeit (bzw. wenn du nur ein Form4 hast) Null.

Dass die VCL diese "blöde" globale Variable dahinsetzt, ist total besch****. Das verleitet jeden Anfänger dazu, sie zu benutzen.
Es ist ja zum Beispiel kein Problem aus TForm4 zwei Formulare zu instanzieren. Und du würdest immer nur das HAndle aus dem Formular bekommen, welches in der globalen Variablen Form4 gespeichert ist. Du bekommst Form4 automatisch mit in deine Methode (es heißt dann nur self und kann weggelassen werden). Deswegen kannst du ja problemlos aus einer Methode auf alle Felder des Objektes zugreifen. Und genau das amcht auch den Unterschied von Methoden zu einfachen Funktionen/Prozeduren aus.

TheMiller 28. Feb 2008 15:38

Re: Mehrere Container für mehrere Threads?
 
Achso. Ja, aber das mache ich ja nicht. Aber gut, ich werde es ändern und versuchen mir anzugewöhnen. Kann mir irgendwann vielleicht mal mehrere Stunden Suche sparen.

Ich spiele jetzt noch ein bissl mit meinen Containern rum!

Ich danke dir jedenfalls erstmal ganz viel! :thumb:

TheMiller 28. Feb 2008 16:02

Re: Mehrere Container für mehrere Threads?
 
Hey!

Noch eine Frage: Ich habe nun die Liste erstellt und folgendermaßen ein Object (TContainer) angefügt:

Delphi-Quellcode:
var
  SQL: TSQLThread;
  Data: TContainer;
  ContId: Integer;
begin
  Data:=TContainer.Create;
  ContId:=FContainerHolder.Add(Data);
  SQL:=TSQLThread.Create(True);
  SQL.FreeOnTerminate:=True;
  SQL.postvars:=False;
  SQL.FHndl:=Handle;
  SQL.DataCode:=1;
  SQL.DataContainer:=TContainer(FContainerHolder.Items[ContId]);
  SQL.Resume;
Aber woher weis meine CallBack-Funktion bzw. die Prozedure, die die Daten behandeln soll, aus welchem Container sie sie nehmen soll? Ich könnte es mehr Message machen, aber WParam und LParam sind leider schon belegt. Was mach ich jetzt?

wicht 28. Feb 2008 18:21

Re: Mehrere Container für mehrere Threads?
 
Wozu benutzt du WParam und LParam denn?
Ich denke, du könntest dir einen Record definieren, den in den Speicher packen, bei SendMessage einen Zeiger dahin mitschicken und dann beim "Empfänger" den Record einlesen, und nach SendMessage im "Sender" den Speicher wieder freigeben.
Und in diesem Record würdest du dir Felder definieren, die alle Infos über die "Nachricht" enthalten.
Oder halt einen Zeiger auf das Container-Objekt oder irgendwie so, da sollten einem doch keine Grenzen gesetzt sein?

HTH

Edit: Sehe gerade, die erste Frage ist wohl vermutlich überflüssig...

TheMiller 28. Feb 2008 18:24

Re: Mehrere Container für mehrere Threads?
 
Ich habe WParam dafür benutzt um zu identifizieren, ob ich Daten senden oder empfangen möchte. Ich habe aber jetzt zwei Messages gemacht, WM_GETCALLBACK und WM_POSTCALLBACK.

Dadurch wurde WParam frei und ich konnte es mit der Container-ID belegen.

Danke für eure Hilfe!

sirius 28. Feb 2008 19:32

Re: Mehrere Container für mehrere Threads?
 
Ansonsten kannst du auch überlegen, ob du den gesamten Bereich von wparam oder Lparam brauchst. du kannst ja ansonsten das hi- und loword der Parameter mit verschiedenen Zahlen belegen. Oder du änderst die Messagenummer.

TheMiller 28. Feb 2008 19:50

Re: Mehrere Container für mehrere Threads?
 
Hm, so passt das eigentlich super. WParam ist einfach die ContainerID und LParam ist die Indexnummer, welche Prozedur aufgerufen werden soll (Case of). Mehr brauche ist nicht. Und wie gesagt. Ich habe eine Message für den Datenempfang und die Anzeige und eine Message für's Daten senden und deren Rückgabewert (Erfolg, Fehlercode etc)

Nur interessehalber: Was ist das hi- und loword der Parameter?

sirius 28. Feb 2008 20:18

Re: Mehrere Container für mehrere Threads?
 
Ich habe mir schon gedacht, dass es so passt. Nur für den Fall, dass du es mal anders benötigst.

Du kannst doch bei TMessage wparamHi und wapramLo nutzen. Das sind halt von dem 32bit-Wert die oberen bzw. die unteren 16Bit.
Zusammensetzen auf der Send-Seite kannst du es mit
Delphi-Quellcode:
wparam:=(hiword shl 16)+loword;
postmessage(...,wparam,...);
//und dasselbe geht auch für Lparam.

TheMiller 28. Feb 2008 20:24

Re: Mehrere Container für mehrere Threads?
 
Gut - jetzt werde ich es nicht brauchen. Vielleich aber später mal. Finde die jetzige Lösung eigentlich sau gut :wink:

Jedenfalls vielen Dank. Habe ziemlich viel gelernt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Seite 2 von 2     12   

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