//---------------------------------------------------------------------------
class TBuff
{
private:
protected:
public:
unsigned short len,port;
unsigned short RealBuf[1000];
};
//---------------------------------------------------------------------------
class Sniffer : public TThread
{
private:
protected:
void __fastcall Execute();
public:
DynamicArray <unsigned short> NumPort;
__fastcall Sniffer(bool CreateSuspended)
: TThread(CreateSuspended) {}
};
//---------------------------------------------------------------------------
bool stop1;
TThreadList **list=new TThreadList*[65536];
int *PortNum;
Sniffer *Thh;
//-----------------------------------------------------------
void __fastcall Sniffer::Execute()
{
//в цикле ловит все пакеты
do
{
if (пришел пакет){
TBuff *BuffObj1=new TBuff;
BuffObj1->len=длина пакета;
BuffObj1->port=номер порта;
memcpy(BuffObj1->RealBuf,буфер с данными,BuffObj1->len);
list[num]->Add(BuffObj1);
}
} while(true); //постоянно работает
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartClick(TObject *Sender)
{
for(int i=0;i<65536;i++)
list=new TThreadList;
Thh = new Sniffer(false);
Thh->FreeOnTerminate=true;
stop1=false;
do
{
for(int i=0;i<65536;i++)
{
TList *plist=list->LockList();
list->UnlockList();
if (plist->Count!=0)
{
TBuff *BuffObj1=(TBuff *)plist->Items[0];
//.............
//выполняем действия с BuffObj1
//.............
delete (TBuff *)plist->Items[0];
plist->Delete(0);
}
}
} while(stop1!=true);
Thh->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StopClick(TObject *Sender)
{
stop1=true;
}
//------------------------------------------------------------------------
плиз проверьте
Код:
Правильно ли организовано взаимодействие между нитью и основной программой?
Потокобезопасны ли мои действия?
Правильно ли я использую TThreadList?