Qt 4.8, Windows XP:QTimer, QThread и TCP сообщения
У меня есть поток, который управляет моим TCP сообщением и открывает/сохраняет/закрывает сокет в нужное время.
Эта же нить запускает QTimer, 200 мс, определенный в данных моего потока, который накачивает событие в классе моего потока один раз (если), сокет открыт. Таким образом, таймер и его событие относятся к потоку, насколько я понимаю идею.
Событие тайм-аута QTimer отправляет TCP-сообщение через порт, принадлежащий потоку, это сообщение keep-alive для данного конкретного элемента аппаратного обеспечения. Должно быть отправлено регулярно или устройство «уходит», что не будет сделано.
Когда сообщение отправлено, я получаю эту ошибку:
«QSocketNotifier: гнездо оповещатели не могут быть включены из другого потока»
Насколько я могу сказать, я утро посылая сообщение от тот же поток и будет ожидать, что любые сигналы и т. д. будут принадлежать/обрабатываться и т. д. им.
Может ли кто-нибудь сказать мне, что мне здесь не хватает?
PS: Сообщение отправляется, устройство делает остаться в живых ... это просто, что я получаю эту ошибку во время выполнения на консоли ошибок Qt, и я очень обеспокоен тем, что есть внутренние проблемы, скрывающиеся из-за этого.
Сообщение не выполняется под управлением OS X 10.6. Я не знаю почему.
+1 Этот ответ, возможно, сохранил мою работу, не шучу! Не могли бы вы рассказать мне, сохраняется ли это в Qt5? И, также, не могли бы вы рассказать о том, где в документации это описано? Благодаря! –
На самом деле, я обнаружил, что QTimer не наследует cotext родителя потока в Qt5 (я не знаю о Qt4.x). Но вы должны убедиться, что QTimer перемещается вместе с рабочим объектом, сделав его дочерним элементом рабочего или создавая его в новом контексте. См. Этот полезный пост: http://qt-project.org/forums/viewthread/21141 –