D
dhsoft
Unregistered / Unconfirmed
GUEST, unregistred user!
我把扫描的代码放在EXECUTE里面
while not Terminateddo
begin
if ((ping_ip_start + fProcess) <= ping_ip_stop) then
begin
myping.Address := iptostr(ping_ip_start + fProcess);
if myping.Ping = 1 then
begin
cs := cs + 1;
mystt := iptostr(ping_ip_start + fProcess);
procexe;
end;
end
else
break;
end;
但这样一次只能扫描一个,速度还不行,
我就在调用的地方加了如下实现多个线程
for i := 0 to number - 1do
mythread := mythread.Create(false);
但是这样的话,同样的IP就会扫描好多次,应该是一个IP扫描一次,而同时有好多次IP一起扫描,可没想到同样的IP扫描多次,加了如下的同步也不行,请大家赐教,多谢了
while not Terminateddo
begin
entercriticalsection(cs1);
//进入临界状态
fProcess := cur_ip;
inc(cur_ip);
leavecriticalsection(cs1);
//释放临界状态
if ((ping_ip_start + fProcess) <= ping_ip_stop) then
begin
myping.Address := iptostr(ping_ip_start + fProcess);
if myping.Ping = 1 then
begin
cs := cs + 1;
mystt := iptostr(ping_ip_start + fProcess);
procexe;
end;
end
else
break;
end;
while not Terminateddo
begin
if ((ping_ip_start + fProcess) <= ping_ip_stop) then
begin
myping.Address := iptostr(ping_ip_start + fProcess);
if myping.Ping = 1 then
begin
cs := cs + 1;
mystt := iptostr(ping_ip_start + fProcess);
procexe;
end;
end
else
break;
end;
但这样一次只能扫描一个,速度还不行,
我就在调用的地方加了如下实现多个线程
for i := 0 to number - 1do
mythread := mythread.Create(false);
但是这样的话,同样的IP就会扫描好多次,应该是一个IP扫描一次,而同时有好多次IP一起扫描,可没想到同样的IP扫描多次,加了如下的同步也不行,请大家赐教,多谢了
while not Terminateddo
begin
entercriticalsection(cs1);
//进入临界状态
fProcess := cur_ip;
inc(cur_ip);
leavecriticalsection(cs1);
//释放临界状态
if ((ping_ip_start + fProcess) <= ping_ip_stop) then
begin
myping.Address := iptostr(ping_ip_start + fProcess);
if myping.Ping = 1 then
begin
cs := cs + 1;
mystt := iptostr(ping_ip_start + fProcess);
procexe;
end;
end
else
break;
end;