Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите с потоком


Страницы:   1 2

linuxoid ©   (2010-07-19 09:38:00) 

Здравствуйте!
не могу разобраться с потоком.
хотел чтоб работала отдельно от основного кода, но не получается.

параллельно хочу запустить другие операции

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, winsock, stdctrls, ExtCtrls;

 type
   ip_option_information = packed record  
       Ttl : byte;    
       Tos : byte;  
       Flags : byte;  
       OptionsSize : byte;  
       OptionsData : Pointer;
   end;

  icmp_echo_reply = packed record
       Address : u_long;      
       Status : u_long;      
       RTTime : u_long;      
           
       DataSize : u_short;        
       Reserved : u_short;        
       Data : Pointer;    
       Options : ip_option_information;
   end;

   PIPINFO = ^ip_option_information;
   PVOID = Pointer;

       function IcmpCreateFile() : THandle; stdcall; external 'ICMP.DLL' name 'IcmpCreateFile';
       function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external 'ICMP.DLL'  name 'IcmpCloseHandle';
       function IcmpSendEcho(
                         IcmpHandle : THandle;    
IcmpCreateFile()
                         DestAddress : u_long;    
                         RequestData : PVOID;    
                         RequestSize : Word;      
                         RequestOptns : PIPINFO;  
                                           
                         ReplyBuffer : PVOID;    
                         ReplySize : DWORD;      
                         Timeout : DWORD          
                        ) : DWORD; stdcall; external 'ICMP.DLL' name 'IcmpSendEcho';

                       
type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   Edit1: TEdit;
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
   hIP : THandle;
   pingBuffer : array [0..31] of Char;
   pIpe : ^icmp_echo_reply;
   pHostEn : PHostEnt;
   wVersionRequested : WORD;
   lwsaData : WSAData;
   error : DWORD;
   destAddress : In_Addr;
   i:integer;
   adress : array [1..30] of pansichar;
begin
memo1.Clear;
  // Ñîçäàåì handle
   hIP := IcmpCreateFile();

   GetMem( pIpe,
           sizeof(icmp_echo_reply) + sizeof(pingBuffer));
   pIpe.Data := @pingBuffer;
   pIpe.DataSize := sizeof(pingBuffer);

   wVersionRequested := MakeWord(1,1);
   error := WSAStartup(wVersionRequested,lwsaData);

adress[1]:='192.168.0.1';
adress[2]:='192.168.0.2';
adress[3]:='192.168.0.3';
adress[4]:='192.168.0.4';
adress[5]:='192.168.0.5';

for i:=1 to 5 do begin

   pHostEn := gethostbyname(adress[i]);

    destAddress := PInAddr(pHostEn^.h_addr_list^)^;

   IcmpSendEcho(hIP,
                destAddress.S_addr,
                @pingBuffer,
                sizeof(pingBuffer),
                Nil,
                pIpe,
                sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                100);

   error := GetLastError();
   if (error 0) then
   begin
        //Memo1.SetTextBuf('Error in call to '+
//                         'IcmpSendEcho()');
        Memo1.Lines.Add(inet_ntoa(destAddress) +' Error code: '+IntToStr(error));
        continue;
   end;

   
   Memo1.Lines.Add('Reply from '+
               IntToStr(LoByte(LoWord(pIpe^.Address)))+'.'+
               IntToStr(HiByte(LoWord(pIpe^.Address)))+'.'+
               IntToStr(LoByte(HiWord(pIpe^.Address)))+'.'+
               IntToStr(HiByte(HiWord(pIpe^.Address))));
   Memo1.Lines.Add('Reply time: '+IntToStr(pIpe.RTTime)+' ms');

end;
   IcmpCloseHandle(hIP);
   WSACleanup();
   FreeMem(pIpe);
end;

end.


Dennis I. Komarov   (2010-07-19 14:56:00) [1]

Чего же тут не понятного? Ну откуда я знаю что где кто поменял.


linuxoid   (2010-07-19 14:38:00) [2]


> И что с этого? Я кофе не пью - жарко...


я вообще не понимаю смысл ваших слов.

у мя есть код, который  хотел бы одновременно запустить.
как мне то реализовать.
я в этом толк не имею. а то что вы спрашиваете, не могу понять...

может опишите .......


Dennis I. Komarov   (2010-07-19 14:23:00) [3]


> это был прежний код. потом изменил я

И что с этого? Я кофе не пью - жарко...


linuxoid   (2010-07-19 14:06:00) [4]


> не было такого...


это был прежний код. потом изменил я


Dennis I. Komarov   (2010-07-19 13:58:00) [5]


> type
>  TForm1 = class(TForm)
>    Memo1: TMemo;
>    Button1: TButton;
>    procedure Button1Click(Sender: TObject);

не было такого...


linuxoid   (2010-07-19 13:54:00) [6]

на форме прописал его.

procedure TForm1.FormCreate(Sender: TObject);
begin
TThreadScan.Create(false);
end;

а вот остальное понять не могу.
как добавлять в мемо и т д.


Dennis I. Komarov   (2010-07-19 13:44:00) [7]


> ну и как сделать тада?

Чего как, делай давай...
или [29] у тебя где-то в коде нарисовано?


linuxoid   (2010-07-19 13:37:00) [8]


> то не твой код...


ну и как сделать тада?


Dennis I. Komarov   (2010-07-19 13:33:00) [9]


> linuxoid   (19.07.10 13:31) [29]

Это не твой код...


linuxoid   (2010-07-19 13:31:00) [10]


> А я просил показать, где создал


TThreadScan.Create(false);


Dennis I. Komarov   (2010-07-19 13:24:00) [11]


> или она обязательно должна выполняться в отдельном юните?

нет, но считай что да...


И. Павел   (2010-07-19 13:23:00) [12]

В статье [4] написано - как запустить поток... Строчка прямо под комментарием: {Создаем и сразу запускаем два процесса}.


Dennis I. Komarov   (2010-07-19 13:22:00) [13]


> linuxoid   (19.07.10 13:20) [24]

А я просил показать, где создал


linuxoid   (2010-07-19 13:22:00) [14]

или она обязательно должна выполняться в отдельном юните?


linuxoid   (2010-07-19 13:20:00) [15]

объявил, затем в Execute; закинул код которые должен выполняться...


Dennis I. Komarov   (2010-07-19 13:15:00) [16]


> linuxoid   (19.07.10 13:12) [22]

"И что это, что это за народное творчество?"


linuxoid   (2010-07-19 13:12:00) [17]


>  type
>  TThreadScan = class(TThread)
>  msg : string;
>  msg2 : string;
>  private
>    { Private declarations }
>  protected
>    procedure Execute; override;
>  end;


Dennis I. Komarov   (2010-07-19 13:07:00) [18]


> вот вроде создал поток. как теперь в баттоне запустить его?

Ткни пальцем, в каком месте его создал?

...
[11] читал, или это для Пушкина написали...


linuxoid   (2010-07-19 13:03:00) [19]

Удалено модератором


linuxoid   (2010-07-19 13:03:00) [20]


> Ты код давай


см.15


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо