2011-06-22 26 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

不是一個線索。我只知道如何通過我對圖形用戶界面和事件循環的一般知識來做到這一點。 –