请高手帮我看看该怎么写
这是一段在MFC中写的数据包捕获的程序片段
不知道怎么能在Qt中实现多线程
//参数定义
#define M_MESSAGEWINPCAP (WM_USER+50)
static HWND hDlgHandle;
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);//预定义回调函数
/*------------------------------------------*/
BEGIN_MESSAGE_MAP(CYGSnifferDlg, CDialog)
ON_MESSAGE(M_MESSAGEWINPCAP,Message_WinPcap) //===== ** Mapping Message ** ====== //Message_WinPcap
END_MESSAGE_MAP()
/*-----*/
voidNetWork::start()
{
.....
pcap_loop(adhandle, 0, packet_handler, NULL);//这是调用的语句
.....
}
/*----------------------------*/
/*回调函数*/
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
pcap_pkthdr *header2 = new pcap_pkthdr;
u_char *pkt_data2 = new u_char[header->len];
memcpy(header2,header,sizeof(pcap_pkthdr));
memcpy(pkt_data2,pkt_data,header->len);
::PostMessage(hDlgHandle, M_MESSAGEWINPCAP, (WPARAM)header2, (LPARAM)pkt_data2); //放置消息
}
LRESULT NetWork::Message_WinPcap(WPARAM wParam,LPARAM lParam)
{
const struct pcap_pkthdr *header = (const struct pcap_pkthdr *)wParam;
const u_char *pkt_data = (const u_char *)lParam;
packet *pkt = new packet;
pkt->header = header;
pkt->pkt_data = pkt_data;
tmpMyWinPcap.AppendPacket(pkt);// save to file
DisptoList(pkt); // Display
ShowInfo();
}