• 4178阅读
  • 1回复

求助:qt中的多线程 [复制链接]

上一主题 下一主题
离线yingaikeke
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-10
请高手帮我看看该怎么写
这是一段在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();
}
离线tingsking

只看该作者 1楼 发表于: 2010-05-11
继承QThread 重写run()方法
我的blog:http://blog.csdn.net/tingsking18
http://blog.csdn.net/tingsking18
快速回复
限100 字节
 
上一个 下一个