![]() |
|
|
![]()
|
|
| hexzo |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Обрушивается многопоточная программа. Схема приблизительно такая.
класс гуя { Sender* sender; //класс умеющий принимать сетевые сообщения конструктор_формы { receiveTcpMessageThread.putSender(sender); // я треду передаю экземпляр класса, метод которого он должен вызвать. } обработчик_кнопки { receiveTcpMessageThread.start(); //стартую тред } } класс receiveTcpMessageThread { run() { receiverref->startTcpListening(); } } И в результате происходит какая то хрень Предсмертное сообщение программы: QSocketNotifier: socket notifiers cannot be disabled from another thread Обваливается всё на строчке? которая содержится в классе Sender:
В шарпе эта схема замечательно работала, со скидкой на то, что там треду можно было сразу передать метод класса, и всё, что начинается с этого метода - будет работать в отдельном потоке, а здесь так нельзя. Добавлено через 4 минуты и 38 секунд Есть ещё такой извращённый вариант на крайний случай - завести в классе треда экземпляр Sender-а. Но тогда встаёт вопрос, как в треде не связанном с гуишным сделать
Потому как ошибка: "Widgets must be created in the GUI thread." |
||||
|
|||||
| hexzo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
hexzo
Есть такой извращённый вариант, перенести этот код в слот объекта привязанного к главному треду и соответственно вызывать его через сигнал. Это сообщение отредактировал(а) hexzo - 12.10.2011, 10:30 |
|||
|
||||
| hexzo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
А ещё можно вызывать в треде нужный метод сигналом.
Так почему-то работает. По идее start_tcp_listening() должно срабатывать в треде гуишного потока, потому что receiverref привязан к нему, поскольку он в нём создавался. Но интерфейс почему-то не тормозится. А почему, я уже запутался.
Это сообщение отредактировал(а) hexzo - 12.10.2011, 11:07 |
|||
|
||||
| hexzo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Оно там и выполняется. А интерфейс не тормозился потому что у меня там выполнялось всё быстро. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |