gpt4 book ai didi

python - 如何解决扭曲中对多个 react 器的需求

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:02 27 4
gpt4 key购买 nike

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

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

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() 获取文件描述符编号。 abstract.fileno 方法未被 _win32SerialPort 覆盖,因此始终返回 -1,我得到一个

QSocketNotifier: Invalid Socket specified

我看过很多关于 twisted 中不允许使用多个 react 器的帖子,但是我认为我在这里假设我需要 Qt 应用程序的 QtReactor 和 windows 串行端口的 win32eventreactor 是正确的。

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

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

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

serial.connectionLost(failure.Failure(Exception))

其中 serial 是 _win32serialport.SerialPort 的实例

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

最佳答案

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

关于python - 如何解决扭曲中对多个 react 器的需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6436935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com