Russian Qt Forum
Ноябрь 22, 2024, 21:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QThread и Winpcap  (Прочитано 7781 раз)
a1ien
Гость
« : Сентябрь 23, 2010, 17:17 »

Подскажите что я не так делаю
Код
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 не заходит.
Записан
UVV
Гость
« Ответ #1 : Сентябрь 23, 2010, 17:32 »

Код:
class Sniff : public QThread
{
public:
    Sniff(QObject *parent = 0);
   ...
};

Sniff::Sniff(QObject *parent) :
   QThread(parent)
{}

Не?
Записан
a1ien
Гость
« Ответ #2 : Сентябрь 23, 2010, 17:38 »

Мммм. ну изменил как посоветовали. Проблема осталась таже.
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Сентябрь 23, 2010, 17:50 »

protected:
    virtual void run();

А то другой метод получается...
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Сентябрь 23, 2010, 17:58 »

Павлик
область видимости не влияет. Но да, так будет правильней
Записан
a1ien
Гость
« Ответ #5 : Сентябрь 23, 2010, 18:01 »

мм..
http://www.doc.crossplatform.ru/qt/4.6.x/qthread.html
в доках было пабликом вот поэтому и брал.
Если делаю просто обычный цикл то все отлично. Тут какието траблы именно с winpcap
Записан
UVV
Гость
« Ответ #6 : Сентябрь 23, 2010, 18:37 »

мм..
http://www.doc.crossplatform.ru/qt/4.6.x/qthread.html
в доках было пабликом вот поэтому и брал.
Если делаю просто обычный цикл то все отлично. Тут какието траблы именно с winpcap
Сфигали?
protected же.
Записан
a1ien
Гость
« Ответ #7 : Сентябрь 23, 2010, 18:40 »

Нет я про экзампл в доках
Код
C++ (Qt)
class MyThread : public QThread
{
public:
    void run();
};
 
void MyThread::run()
{
    QTcpSocket socket;
    // connect QTcpSocket's signals somewhere meaningful
    ...
    socket.connectToHost(hostName, portNumber);
    exec();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 23.