QTimer,QThread和TCP消息传递

时间:2012-05-29 17:41:10

标签: qthread

Qt 4.8,Windows XP:

我有一个管理我的TCP消息的线程,并在适当的时候打开/维护/关闭套接字。

这个相同的线程启动一个QTimer,200毫秒,在我的线程数据中定义,它在我的线程的类中抽一个事件(如果)套接字打开。所以计时器及其事件属于线程,我最好理解这个想法。

QTimer超时事件通过属于该线程的端口发送TCP消息,它是该特定硬件项的保持活动消息。必须定期发送或设备“消失”,这是不会做的。

发送邮件时,我收到此错误:

“QSocketNotifier:无法从另一个线程启用套接字通知程序”

据我所知,我从同一个线程发送消息,并希望由它拥有/处理任何信号等。

谁能告诉我这里缺少什么?

PS:发送消息 ,设备 保持活着...这只是我在Qt错误控制台上得到这个运行时错误而且我'我非常担心因为它而潜伏着内部问题。

在OS X 10.6下不会运行该消息。我不知道为什么。

1 个答案:

答案 0 :(得分:3)

好的,这是独家新闻。由于QT的设计者只知道QTimer,因此继承了线程父级的上下文。不是从它发起的线程的上下文。所以当计时器关闭,并且你从它调用的插槽发送一条消息时,你不在线程的上下文中,你在父母的上下文中。

您也无法启动该线程的子线程,因此您可以触发实际位于所需线程中的计时器。 Qt不会让它运行。

因此,花费一些内存,建立队列,从其他地方将消息加载到队列中,在拥有TCP端口的线程中查看队列,并在获得em时发送em。这很有效。