AGB  ·  Datenschutz  ·  Impressum  







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

Thread Anfängerfrage

Ein Thema von Spurius · begonnen am 22. Nov 2003 · letzter Beitrag vom 27. Nov 2003
Antwort Antwort
Seite 3 von 5     123 45      
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#21

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 05:51
Hallo,
ich hab das Buch nicht, kannst du mir nicht einfach sagen, wie das geht?
Thx
Spurius
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#22

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 08:25
Hallo Spurius,

bitte verstehe mich nicht falsch: Ich helfe wirklich gerne.
Das Problem ist bei den gegenseitig verwendeten Units aber weniger das Wie für Deine konkrete Problemstellung als das Warum muss man bei der Verwendung von Typen, die in anderen Units deklariert sind, auf diese oder eine andere Weise reagieren.
Dies bedarf einer umfassenderen Erklärung statt einem kurzen Statement, mithilfe von drei Zeilen Code, die zudem, wenn an falscher Stelle platziert, unweigerlich vermeidbare Folgefragen nach sich ziehen würden.

Es handelt sich beim Einbinden von Units unter Pascal wie Delphi um ein grundlegendes Prinzip, das verstanden werden will und dessen Kenntnis von jeder Bilbiothek von Dritten (zB Komponenten-Suites) vorrausgesetzt wird. Ich halte es deshalb für sinnvoll, das dahinter stehende Prinzip zu erläutern.

Diese Thematik ist allerdings in der OH besser und umfassender beschrieben, als ich es hier könnte und sie bietet sich Dir als Informationsquelle an, die Du kurzfristig und zu jeder Zeit befragen kannst. Wenn Du also Dein Begleitmaterial zu Delphi verlegt hast, solltest Du sie stattdessen mit den Stichworten "unit-Klauseln" befragen. Dort findest Du auch Informationen zu dem von Dir entdeckten Prinzip der "zirkulären Unit-Referenzen" sowie dem Thema, dass Du zur Lösung Deines akuten Problem zu benötigen scheinst: "Mehrere und indirekte Unit-Referenzen", dem Abschnitt aus dem ich im letzten Posting zitiert habe und eigentlich schon die Lösung beschreibt.
gruß, choose
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#23

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 12:48
Hallo,
also erstmal Danke, dass du mir soviel hilfst.
Ich hab mir die uses-klauseln in der Hilfe angeschaut,(ich hab schülerversion, da war kein Handbuch dabei), bin aber nicht schlau daraus geworden, was das für mein Programm bedeutet. Ich habe bisher die Unit, in der der Thread geschrieben ist, unter den uses von meinem Hauptprogramm eingebunden.
Aber wie kann ich den darin beschriebenen Thread jetzt einsetzten? Ich versteh das nicht
Kannst du mir da vielleicht nochmal so ein Musterbeispiel machen, wie du es schonmal gemacht hast?
Gruß
Spurius
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#24

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 13:42
Hallo Spurius,

wenn ich Deine Antwort richtig interpretiere, ist die Fehlermeldung "Undefinierter Bezeichner" inzwischen verschwunden und Du weißt nichts ganz, wie Du ein Exemplar Deiner Klasse erzeugen kannst.

Für ein ähnliches Szenario ist in der D7-OH unter TStringList dann "Verwendung von TStringList" und von dort "Eine neue Stringliste erstellen" beschrieben. Der Text handelt von einem zum Zeitpunkt der Formularerstellung erzeugten Objekt einer Klasse, die man aus dem OI nicht direkt kennt, zeigt die Benutzung zu einem späteren Zeitpunkt und auch, wie man das Objekt wieder freigibt.

Achtung: Treads-Objekte sollten vor der Freigabe unbedingt terminiert sein! Falls Du bei diesem Problem angelangt sein solltest, stelle die Frage am besten in einem neuen DP-Tread.
gruß, choose
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#25

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 16:22
Hallo,
ich hab mit das mit tstringlist angeschaut, und probiert das nachzumachen.
aber es ist ja nicht die thread-unit unbekannt, sondern mythread!
hier mal mein code
Delphi-Quellcode:
unit modul;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls, ExtCtrls, Mask, ComCtrls, IdTCPServer,threadtest; // <- threadunit

type
  TForm1 = class(TForm)
    Label1: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Memo1: TMemo;
    connect: TButton;
    Button2: TButton;
    Edit1: TEdit;
    ip: TEdit;
    Port: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    client: TIdTCPClient;
    Timer1: TTimer;
    server: TIdTCPServer;
    TabSheet2: TTabSheet;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Memo2: TMemo;
    serverport: TEdit;
    servername: TEdit;
    Button4: TButton;
    Button5: TButton;
    Memo3: TMemo;
    Button3: TButton;
    procedure connectClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure serverConnect(AThread: TIdPeerThread);
    procedure serverExecute(AThread: TIdPeerThread);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private-Deklarationen }
  public
    fthread: tmythread; //hier soll ein neuer thread erstelt werden, aber
  end; mythread ist unbekannt!

var
  Form1: TForm1;

implementation
uses thread;
{$R *.dfm}

procedure TForm1.connectClick(Sender: TObject);
begin
 client.Port := strtoint(port.Text);
 client.Host := ip.Text;
 client.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 client.Writeln(edit2.Text + ': ' + edit1.text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

 memo1.Lines[0] := 'Chatprotokoll';
 memo2.lines[0] := 'Chatprotokoll';
 memo3.Lines[0] := 'Angemeldete Chatter';
end;
das ist der anfang. vielleicht kann ich damit mein problem verdeutlichen.
Gruß
Spurius
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#26

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 16:41
Ist die Klasse tmythread im Interface-Teil der Unit threadtest deklariert?

[edit]Welchen Zweck hat die Unit thread, die Du in der Formular-Unit modul einbindest?[/edit]
gruß, choose
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#27

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 17:13
Hallo,
also ich hatte einen thread mythread und nicht Tmythread erstellt. der thread geht jetzt
aber er friert ein, ich denke das liegt daran, dass es client.hasdata nicht gibt.
Code:
unit threadtest;

interface

uses
  Classes,idtcpclient,dialogs,StdCtrls,sysutils;

type
  tmythread = class(TThread)
  private
    fclient:tidtcpclient;
    fmemo:tmemo;
    procedure updatememo;
  protected
    procedure Execute; override;
  public
   constructor create(const aclient: tidtcpclient;
   const amemo: tmemo);

  end;

implementation
uses modul;

constructor tmythread.create(const aclient: tidtcpclient;
         const amemo: tmemo);
begin
 inherited create(true);
 fclient := aclient;
 fmemo := amemo;
 resume;
end;

procedure tmythread.Execute;
begin
 while not terminated do
   if fclient. then     //<- hasdata ???
   synchronize(updatememo)
  else
   sleep(100);
end;


procedure tmythread.updatememo;
begin

 fmemo.Lines.Append(fclient.ReadLn);
end;
end.
Das ist meine Threadunit. und da der thread sonst immer ausgeführt wird, ist es ja klar, dass das prog einfriert. weisst du, was ich da hinter client einsetzten könnte?
Gruß
Spurius
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 16. Aug 2002
178 Beiträge
 
#28

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 17:24
Schau dir nochmal das was ich geschrieben habe an. Das sollte dir helfen.
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#29

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 17:52
Jetzt hab ich aber mit viel Mühe den Thread hinbekommen, und würde den gern weiterverwenden.
Trotzdem Danke
Spurius
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 16. Aug 2002
178 Beiträge
 
#30

Re: Thread Anfängerfrage

  Alt 26. Nov 2003, 17:58
Wenn du deinen Code nicht ändern wirst, dann wird dein Problem natürlich weiterhin bestehen... du muss schon was ändern und soviel ist das auch nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 09:35 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