AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TThread -> Execute(SockId: Integer);

Ein Thema von StanY · begonnen am 7. Nov 2004 · letzter Beitrag vom 8. Nov 2004
Antwort Antwort
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#1

TThread -> Execute(SockId: Integer);

  Alt 7. Nov 2004, 19:05
Ich habe ein Programm, was mehrere Threads erstellt, während der Laufzeit.

Nun habe ich das Problem, dass quasie bei der OnExecute-Prozedur eine Variable übergeben werden muss.

Ist mir aber nciht möglich, da dann der Compiler rummeckert, dass sich die neue Prozedur von der alten unterscheidet:

Delphi-Quellcode:
TMyThread = class(TThread)
  protected
    procedure Execute(SockId: Integer);
end;
Wie kann ich das realisieren?

(Ein neues Ereignis schreiben und dann quasie manuell aufhühren geht nicht, da es dann nicht als thread behandelt wird und die Hauptanwendung lahmt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: TThread -> Execute(SockId: Integer);

  Alt 7. Nov 2004, 23:07
Moin!

1. IMHO sollte man die Parameterliste von Execute nicht ändern, da diese Methode nicht von dir später aufgerufen wird, sondern vom der originalen TThread Klasse und daher würde das dann nicht mehr klappen.
2. Du musst die Methode überschreiben - aber das würde er auch ordentlich schon vorbereiten, wenn du über Datei->Neu->Thread gegangen wärst...
3. Wieso der Execute Methode übergeben? Definiere eine Property im Thread...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TThread -> Execute(SockId: Integer);

  Alt 7. Nov 2004, 23:10
Zitat von Muetze1:
3. Wieso der Execute Methode übergeben? Definiere eine Property im Thread...
In so Fällen überschreib ich immer den Constructor Create
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#4

Re: TThread -> Execute(SockId: Integer);

  Alt 8. Nov 2004, 14:17
Entweder versteh ich euch oder ihr mich net

Also, hier mal ausführlicher. Dabei wollte ich heute weiter arbeiten \:

Ich habe eine eigene Klasse. Abgeleitet von der TIdTCPClient-Komponente. Halt mit eingebautem Thread:

Delphi-Quellcode:
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;

  TConnection = class(TIdTCPClient)
    Thread: TMyThread;
  end;
TMyThread steht halt darüber.

Nun erstelle ich per DynArr von TConnection mehrere TIdTCPClienten und mehrere Threads.

Jeder Thread muss nun für _seinen_ TCPClienten ReadLn ausführen, was ich realisieren wollte, indem ich TMyThread.Execute eine Integer Variable übergebe, die dann sagt, welchen Verbindung er abhören soll:

Delphi-Quellcode:
TMyThread.Execute(SockId: Integer);
begin
  memDebug.Lines.Add(Connection[SockId].ReadLn);
end;
Wie kann ich das möglich machen?
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#5

Re: TThread -> Execute(SockId: Integer);

  Alt 8. Nov 2004, 14:28
Zitat von StanY:
Jeder Thread muss nun für _seinen_ TCPClienten ReadLn ausführen, was ich realisieren wollte, indem ich TMyThread.Execute eine Integer Variable übergebe, die dann sagt, welchen Verbindung er abhören soll:

Wie kann ich das möglich machen?
Delphi-Quellcode:
type
  TMyThread = class(TThread)
  private
    FSockedId: Integer;
  protected
    procedure Execute; override;
  public
    property SockedId: Integer read FSockedId write FSockedId;
  end;
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
  // arbeite mit FSockedId
end;
Und so erstellst du dann den Thread...
Delphi-Quellcode:
  with TMyThread.Create(True) do
  begin
    FreeOnTerminate := True;
    SockedId := 1234;
    Resume;
  end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#6

Re: TThread -> Execute(SockId: Integer);

  Alt 8. Nov 2004, 14:33
Ich idiot, da hätte ich drauf kommen können \: - Danke.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz