Wątek który nie uruchamia się...

0

Zrobiłem klase wątku, cały kod itd, ale wątek można sobie tworzyć a i tak się za nic nie uruchomi. Oto kod wątku:

unit Unit2;

interface

uses
	Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}, IdBaseComponent, IdComponent,
	IdTCPConnection, IdTCPClient, IdEcho, StrUtils;

type
	TPing = class(TThread)
	private
		FEcho: TIdEcho;
		FSendData: String;
		FRuns: Integer;
		FMean: Extended;
		function GetDS: integer;
	protected
		procedure Execute; override;
		procedure EchoIt;
	public
		constructor CreatePing(CreateSuspended: Boolean);
		destructor Destroy;override;
		Property Runs: integer read FRuns;
		property Mean: Extended read FMean;
		property DataSize: Integer read GetDS;
		Function IsTerminated: Boolean;
	end;

implementation

{ Important: Methods and properties of objects in visual components can only be
	used in a method called using Synchronize, for example,

			Synchronize(UpdateCaption);

	and UpdateCaption could look like,

		procedure TPing.UpdateCaption;
		begin
			Form1.Caption := 'Updated in a thread';
		end; }

procedure TPing.Execute;
begin
	{ Place thread code here }
	repeat
		begin
			{Synchronize(}EchoIt{)};
			MessageBox(0, 'Running','Droz', MB_OK);
		end;
	until Terminated;
end;

constructor TPing.CreatePing(CreateSuspended: Boolean);
var
	I: byte;
	S: String;
begin
	inherited Create(CreateSuspended);
	FEcho:=TIdEcho.Create(nil);
	FEcho.Host:='192.168.58.128';
	for I:=255 downto 1 do
		S:=Chr(I);
	S:=S+'HK';
	FSendData:=strUtils.DupeString(S, 256*256);
end;

destructor TPing.Destroy;
begin
	FEcho.Free;
	FEcho:=nil;
	inherited;
end;

procedure TPing.EchoIt;
begin
	FEcho.Echo(FSendData);
	FRuns:=FRuns+1;
	FMean:=(FMean+FEcho.EchoTime)/2;
end;

function TPing.GetDS: integer;
begin
	Result:=Length(FSendData);
end;

function TPing.IsTerminated: Boolean;
begin
	Result:=Terminated;
end;

end.

a oto kod tworzenia i wywoływania:

procedure TfrmDroz.btnStartClick(Sender: TObject);
var
	Thred: TPing;
begin
	Thred:=TPing.CreatePing(True);
	Thredz.Add(Thred);
	Thred.AfterConstruction;
end;

Błąd jest w kodzie wątku/wywołania czy może gdzie indziej. Co jest źle? Może to wina delphi (7ent bez update pack)

0

no wiesz, jak startujesz wątek poprzez Create(true), to nic dziwnego - przecież tworzy się zawieszony (suspended). na końcu konstruktora TPing klasy daj inherited create(false), a skasuj inherited create() z początku.

Może to wina delphi (7ent bez update pack)
Jaaasne

0

constructor TPing.CreatePing(CreateSuspended: Boolean);

TPing.CreatePing(True);

// no jak? przecież w ten sposób utworzy się wątek w stanie sleeping. johny właśnie tak robi i jest źle - Ł
// dlatego pogrubione, mialem na mysli false i zapomnialem zmienic :P - W

0

Niby tak, ale specjalnie zrobiłem aby uruchomiło sie w stanie uśpienia, po to abym zdążył dodać na listę i przed uruchomieniem wykonać czynności z obsługą itp, a dopiero później go uruchomić korzystając z AfterCreate, bo tak było w helpie. ogólnie chodzi o to czemu AfterCrate nie działa

0

Nie wiem, ale zamiast Thred.AfterConstruction; daj Thred.Resume; i pójdzie jak z bicza strzelił.

0

Dalej nie śmiga... nawet nie wiem od czego to może być...

0

Hmm - nie wiem dokładnie, bo nie wiem co ma robić ten komponent ale wydaje mi się, że w wątku są tylko zmieniane pewne pola.. + MessageBox w Execute.. nie ma nic wiecej.. I tak btw: ja zawsze daje while (not Terminated) then .. - pamietam, że z repeat były jakieś wałki tu.. nie wiem dlaczego :| - cóż.. może coś to da....

0

cały prog jest tu: <url>egon.zsi.kielce.pl/~hl03kowalskih/ddos.rar</url> kombinuje i nadal nic. jakby ktoś potrafił to przerobić to byłbym wdzięczny

1 użytkowników online, w tym zalogowanych: 0, gości: 1