如何解决扭曲的多个反应堆的需求

时间:2011-06-22 08:23:05

标签: python twisted reactor

我使用qt4reactor在Linux上运行Qt应用程序 应用程序在串行端口上发送和接收字节。 这在使用QtReactor

的Linux上非常有效

然而,当我将应用程序移植到Windows时,我遇到了问题。 在Windows上我使用_win32SerialPort中的SerialPort类。 _win32SerialPort中的doc字符串非常清楚:

Requires PySerial and win32all, and needs to be used with win32eventreactor.

我假设需要使用win32eventreactor是因为addReader,addWriter方法是为windows编写的。

当使用QtReactor时,只要在传输上调用了loseConnection,就会调用twisted.internet.abstract中的loseConnection,最终调用qt4reactor addWriter方法(刷新输出)。

然后创建一个qt4reactor.TwistedSocketNotifier,它尝试获取select()的文件描述符号。 _win32SerialPort不会覆盖abstract.fileno方法,所以始终返回-1并且我得到了

QSocketNotifier: Invalid Socket specified

我已经看过很多关于多个反应器的帖子不允许扭曲,但我认为我在这里假设我需要Qt应用程序的QtReactor和Windows串口的win32eventreactor。

或者我可以使用其他一些解决方法吗?

注1:在Windows上使用QtReactor时,串口工作正常,即可以发送和接收数据。只有当我关闭应用程序时才会收到“指定无效套接字”

注2:现在我找到了一个解决方法。我使用QtReactor,但在关闭我的应用程序时我做了

serial.connectionLost(failure.Failure(Exception))

其中serial是_win32serialport.SerialPort

的实例

这样就不会调用abstract.loseConnection,这意味着永远不会调用QtReactor addWriter来刷新输出。我怀疑最好的解决方案是调用lostConnection并正确刷新输出。

2 个答案:

答案 0 :(得分:2)

我最近添加了selectreactor, iocpreactor, and gtkreactor on Windows支持的串口。我希望这种方法可以扩展到在Qt反应器中支持它们。

答案 1 :(得分:0)

在Win32反应器的空闲事件中调用Qt消息检查/处理函数。