Цитата:
Сообщение от Stanei
В общем почитав про инди, набросал вот это:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | unit Unit1;
interface
uses
Winapi . Windows, Winapi . Messages, System . SysUtils, System . Variants, System . Classes, Vcl . Graphics,
Vcl . Controls, Vcl . Forms, Vcl . Dialogs, Vcl . StdCtrls, idhttp;
type
TForm1 = class (TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end ;
type pot= class (tthread)
private
public
procedure execute; override;
end ;
var
Form1: TForm1;
id:Tidhttp;
p:pot;
implementation
{$R *.dfm}
procedure pot . Execute;
var
s: string ;
begin
if p . Terminated= false then id . Free;
if p . Terminated= false then id:= nil ;
if p . Terminated= false then form1 . Memo1 . Lines . Add( 'готово' );
end ;
procedure TForm1 . Button1Click(Sender: TObject);
begin
form1 . Memo1 . Lines . Add( 'Старт' );
if id<> nil then
begin
p . Terminate;
id . Socket . Close;
id . Free;
id:= nil ;
end ;
id:=Tidhttp . Create( nil );
p:=pot . Create( true );
p . FreeOnTerminate:= true ;
p . Priority:=tpnormal;
p . Resume;
end ;
end .
|
Этот код будет работать стабильно, или нужно что то добавить/исправить? Что бы не получилось такого, что после часа пользования программой она прикажет долго жить?
|
Ну хотя бы закодить корректно, например, часть того что ты накалякал будет выглядеть намного проще так:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | procedure pot . Execute;
var
s: string ;
begin
if not p . Terminated then
begin
try
id . Disconnect;
finally
FreeAndNil(id);
end ;
form1 . Memo1 . Lines . Add( 'готово' );
end ;
end ;
|
Зы, в тырнете куча примеров правильной многопоточки...