2011-06-22 27 views
4

我使用qt4reactor 应用程序发送和串行端口上接收的字节Linux上运行Qt应用程序。 这工作得很好的Linux上的QtReactor如何解决需要多个反应堆在扭曲

然而,当我端口的应用程序到Windows然后我有一个问题。 在Windows上,我使用_win32SerialPort的SerialPort类。 在_win32SerialPort doc字符串是很清楚的:

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

我认为需要使用win32eventreactor是因为addReader,addWriter方法为Windows编写的。

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

这就造成它试图获得一个文件描述符号码选择()qt4reactor.TwistedSocketNotifier。该abstract.fileno方法不受_win32SerialPort覆盖,因此-1总是返回,我得到多个反应堆一

 
QSocketNotifier: Invalid Socket specified 

我看到很多帖子在扭曲不允许的,但我认为我是正确的在这里假设我需要QtReactor用于Qt应用程序,而win32eventreactor用于Windows串行端口。

或者是有一些其他的解决办法,我可以使用?

注1:在Windows上使用QtReactor时,串行端口做工精细,即它们可以发送和接收数据。只有当我关闭,我得到了应用程序“无效的套接字指定”

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

 
serial.connectionLost(failure.Failure(Exception)) 

其中串口是_win32serialport.SerialPort

的实例,这样abstract.loseConnection不会被调用,这意味着QtReactor addWriter是从来没有所谓的冲输出。我怀疑,最好的解决方案是调用lostConnection并正确地获取输出。

回答

0

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

+0

你知道我在哪里可以得到一个这样的例子吗?或者至少,空闲事件定义在哪里?谢谢 –

+0

不是一个线索。我只知道如何通过我对图形用户界面和事件循环的一般知识来做到这一点。 –