![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите с потоком
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