![]() |
|
|
![]()
|
|
| a1ien |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
Подскажите что я не так делаю
Если в on_pushButton_clicked() просто вызвать sniff->run(); то qDebug("Ping 1"); , qDebug("Ping 2"); и пакеты ловятся. А если через старт то он вобще не ловит ни одного пакета и вобще в packet_handler не заходит. Но до qDebug("Ping 1"); выполняется. |
||||
|
|||||
| RedDigger |
|
||||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: нет Всего: 1 |
А можешь объяснить чего ты хочешь добиться? Возможно целесообразней использовать QtConcurrent?
А на счет возможной причины в данном примере - В случае когда ты вызываешь
- это не стартует новый поток. Он запускается в основном потоке и работает. Если же ты всетаки используешь его как реализацию потоков - используй функцию
Она в свою очередь создает поток в начале которого вызывается функция run() которая ДОЛЖНА вызывать фукнцию exec() что вызывает старт работы потока. следовательно советы сводятся к двум: 1. добавить exec() в конец блока run() 2. убрать слово virtual из объявления функции run(). Объяснение - Таблица виртуальных методов Удачи |
||||
|
|||||
| a1ien |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.6.2008 Репутация: нет Всего: нет |
Сделал. Только вроде как в этом сымсла нету так-как 1 pcap_loop и так делает бесконечный цикл 2 всеравно вызывается то что нужно. |
|||
|
||||
| RedDigger |
|
|||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: нет Всего: 1 |
Объясни еще раз саму задачу, которую нужно решить..
Данный вопрос не в том что есть бесконечный цикл или нет.. ты унаследовал для своего класса Qthread родителя.. следовательно хочешь сделать отдельный поток.. мой тебе совет - используй QtConcurrent.. намного проще запустить отдельный поток и не перегружать дополнительными данными код и память при выполнении... вот тебе пример использования -
код стартанет все твой безконечный цикл в отдельном потоке и все остальное будет отвечать.. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
если собираешься обрабатывать события от созданных в потоке объектов - то да, должна. В примере ТС ничего такого нет, поэтому в exec() нет никакого смысла. А использовать QtConcurent лучше для однообразной обработки большого количества одинаковых ( по структуре, а не по значению ) данных. А для запуска же какого-то действия в параллельном потоке как раз и используется QThread. a1ien, я правильно понимаю, что ф-ция pcap_loop должна вызывать ф-цию packet_handler ? Пишет ли что-нибудь твоя IDE при запуске приложения и при нажатии кнопки в окне вывода ( Output в visual studio ) ? И ещё. попробуй добавить Q_OBJECT в описание класса Sniff
Это сообщение отредактировал(а) borisbn - 25.9.2010, 09:48 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |