📄 thread_scan_ping.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "thread_scan_ping.h"
#include "function_1.h"
#include "tlookup_name.h"
#include "main.h"
#include "syncobjs.hpp"
#pragma package(smart_init)
extern unsigned long ping_ip_start;
extern unsigned long ping_ip_stop;//开始,结束的ip
extern int cur_ip;//已工作的ip数
extern int ping_thread_no;//已工作的ip数
extern boolean thread_run;//已工作的ip数
extern int share_thread_no;//share线程数量
extern int share_ip_no;//share工作的位置指示
extern boolean only_ping;
extern int scan_thread_no;//scan的线程
extern TStringList * main_list;
extern TCriticalSection *ping_CriticalSection;//全局临界变量
//---------------------------------------------------------------------------
//PING线程的结束处理事件
void __fastcall Tmy_scan_ping::ThreadDone(TObject * Sender)
{
((Tmy_scan_ping*)Sender)->FPing->Free();
ping_thread_no--;
main_f->scan_edit2->Text=IntToStr(ping_thread_no+scan_thread_no);
if ((scan_thread_no==0)&&(ping_thread_no==0))
{
main_f->Bar->Position=0;
main_f->scan_ip->Text="扫描完毕,请查看...";
}
}
__fastcall Tmy_scan_ping::Tmy_scan_ping(bool CreateSuspended): TThread(CreateSuspended)
{
FPing=new TPing(main_f);
FPing->Timeout=StrToInt(main_f->Edit12->Text);
OnTerminate =ThreadDone;
FreeOnTerminate = True;
FPing->OnEchoReply=PingEchoReply;
ping_thread_no++;
main_f->scan_edit2->Text=IntToStr(ping_thread_no+scan_thread_no);
}
//---------------------------------------------------------------------------
void __fastcall Tmy_scan_ping::Execute()
{
int no;
while (thread_run){
ping_CriticalSection->Enter();//进入临界状态
no=cur_ip;
cur_ip++;
main_f->scan_ip->Text=iptostr(ping_ip_start+no);
ping_CriticalSection->Leave();//析放临界状态
if ((ping_ip_start+no)<=ping_ip_stop)
{
FPing->Address=iptostr(ping_ip_start+no);
FPing->Ping();
} else break;
}
}
void __fastcall Tmy_scan_ping::PingEchoReply(TObject *Sender, TObject *Icmp,
int Error)
{
Synchronize(set_bar);
if (Error==1) Synchronize(set_str);
else
if (!only_ping) Synchronize(set_str2);
}
//---------------------------------------------------------------------------
void __fastcall Tmy_scan_ping::set_bar()
{
main_f->Bar->Position=cur_ip;
}
void __fastcall Tmy_scan_ping::set_str()
{
TTreeNode *temp_node;
temp_node=main_f->Tree_port->Items->Add(NULL,FPing->Address);
temp_node->ImageIndex=0;
temp_node->SelectedIndex=0;
main_list->Add(IntToStr(Integer(temp_node->ItemId)));
main_list->Add(FPing->Address);
main_f->scan_edit3->Text=IntToStr(StrToInt(main_f->scan_edit3->Text)+1);
if (main_f->CheckBox2->Checked){
TLOOKUP_NAME *bubble;//查找名称
bubble = new TLOOKUP_NAME(Integer(temp_node->ItemId),FPing->Address,false);
}
main_f->thread_time->Enabled=true;
}
void __fastcall Tmy_scan_ping::set_str2()
{
TTreeNode *temp_node;
temp_node=main_f->Tree_port->Items->Add(NULL,FPing->Address);
temp_node->ImageIndex=1;
temp_node->SelectedIndex=1;
main_list->Add(IntToStr(Integer(temp_node->ItemId)));
main_list->Add(FPing->Address);
if (main_f->CheckBox2->Checked){
TLOOKUP_NAME *bubble;//查找名称
bubble = new TLOOKUP_NAME(Integer(temp_node->ItemId),FPing->Address,false);
}
main_f->thread_time->Enabled=true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -