Подскажите что я не так делаю
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
sniff = new Sniff();
sniff->start();
}
C++ (Qt)
#include <QThread>
#include "pcap.h"
class Sniff : public QThread
{
public:
Sniff();
virtual void run();
friend void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
};
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
qDebug("Ping 2");
struct tm *ltime;
char timestr[16];
time_t local_tv_sec;
/*
* unused parameters
*/
(VOID)(param);
(VOID)(pkt_data);
/* convert the timestamp to readable format */
local_tv_sec = header->ts.tv_sec;
ltime=localtime(&local_tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
qDebug(QString("%1,%2 len:%3").arg(timestr).arg(header->ts.tv_usec).arg(header->len).toAscii());
}
void Sniff::run()
{
.....
qDebug("Ping 1");
pcap_loop(adhandle, 0, packet_handler, (u_char*)this);
}
Если в on_pushButton_clicked() просто вызвать sniff->run();
то qDebug("Ping 2"); и пакеты ловятся.
А если через старт то он вобще не ловит ни одного пакета и вобще в packet_handler не заходит.