[Indy,TCP,Thread,ReadBuffer] While will nicht stopen!
Hey leude ...
Also, ich versuche seit ein par Tage ein Client - Server programm (genauer gesagt 2 softs, ein Client un ein Server) um eine bassi für ein Gameserver zu erstellen ;) Mein SC:
Delphi-Quellcode:
Main problem:
unit UMain;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdAntiFreezeBase, IdAntiFreeze; // ------- NETWORK PROTOKOL -------- // v001 type TNetConfig = record data : boolean; CMD : string[20]; SIP : string[16]; DIP : string[16]; end; // --------------------------------- type TForm1 = class(TForm) tcpClient: TIdTCPClient; GroupBox1: TGroupBox; btnConnect: TButton; edtHost: TEdit; edtPort: TEdit; edtUser: TEdit; edtPass: TEdit; btnDisconnect: TButton; Label1: TLabel; Label2: TLabel; memLog: TMemo; IdAntiFreeze1: TIdAntiFreeze; procedure FormDestroy(Sender: TObject); procedure btnConnectClick(Sender: TObject); procedure btnDisconnectClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; inloop : integer = 1; //default value = 1 (while in thread = stop !) implementation {$R *.DFM} function netscan(P : pointer): integer; var Data:TNetConfig; begin // Code ! while inloop =0 do begin //read data from server // PROBLEM IST VON HIER Form1.tcpclient.ReadBuffer(Data,sizeof(Data)); // BIS HIER ;) if Data.data = false then Form1.memLog.Lines.add('STR:'+Data.CMD) else Form1.memLog.Lines.add('CMD:'+Data.CMD); // read thread status (inloop value) sleep(1); Form1.Label1.Caption := inttostr(inLoop); end; end; procedure TForm1.FormDestroy(Sender: TObject); begin //set inLoop to 1 (stops while in thread) InterlockedExchange(inLoop, 1); // TCP Disconnection ! tcpclient.Disconnect; end; procedure TForm1.btnConnectClick(Sender: TObject); var ThreadID: LongWord; p: Pointer; begin // Server-IP (Data from edtHost) tcpclient.Host := edtHost.Text; // Server-Port (Data from edtPort) tcpclient.Port := strtoint(edtPort.Text); // Connection to server tcpClient.Connect; // If connection is succesfull, then start the thread ! if tcpClient.Connected then begin memLog.Lines.Add('Connected to server!'); //set inLoop to 0 (while in thread can run) InterlockedExchange(inLoop, 0); //start thread ! CloseHandle(BeginThread(nil, 0, @netscan, p, 0, ThreadID)); end; end; procedure TForm1.btnDisconnectClick(Sender: TObject); begin //set inLoop to 1 (stops while in thread) InterlockedExchange(inLoop, 1); end; end. Wenn ich die zeile
Delphi-Quellcode:
setze dann kann ich den wert von inLoop nich mehr ändern. Es bleibt immer bei 0, dh das mein while schleiffe im thread nicht stopt und wenn ich das Programm einfach zuclicke et halte ich eine Fehlermeldung ... execption .. bla bla .."Disconnect" ... Ich verstehe wo das problem ist ... ich versuche ein ReadBuffer() zu machen, doch ich bin schon disconnected ... doch? Wie löse ich das jetzt?
Form1.tcpclient.ReadBuffer(Data,sizeof(Data));
- Thread killen? Warum geet das mit dem inLoop nicht ? Thx :D PS: Hab den SC so gut es nur geht geComment! |
Re: [Indy,TCP,Thread,ReadBuffer] While will nicht stopen!
hmmm ... habs einfach gekillt ... ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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