c – 如果打开设备,QSerialPort会导致程序停止(无限循环?)
我想在串行设备上写.不幸的是,我觉得QSerialPort在
linux下没有正确实现.与其他方法(
python)相比,我得到了!有时候!当我试着打电话时,程序挂起:
serial.open(QIODevice::ReadWrite) 我正在使用http://qt-project.org/wiki/QtSerialPort的示例(见下文). QSerialPortInfo正常工作,以便我可以在打开它之前搜索我的设备.问题出现在所有Qt 5. *系列中.我目前正在使用OpenSuse存储库中的5.3 beta.其他工具或方法证明设备正在运行(Windows或Python). // Example use QSerialPortInfo foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) { qDebug() << "Name : " << info.portName(); qDebug() << "Description : " << info.description(); qDebug() << "Manufacturer: " << info.manufacturer(); // Example use QSerialPort QSerialPort serial; serial.setPort(info); if (serial.open(QIODevice::ReadWrite)) // Hang of the program serial.close(); } 工作python脚本: com_port = 4 baud_rate = '9600' pySerial = serial.Serial(com_port,baud_rate) 编辑: 解决方法
我不知道帕普先生在抱怨什么;我能够在没有任何更多信息的情况下重现您的问题.
在Linux上,如果具有打开的QSerialPort实例的Qt进程异常终止或者在进程退出时QSerialPort实例未被销毁,则锁定文件会挂起并可能导致问题.过时的锁文件不应该导致此问题;锁定文件包含崩溃的应用程序的PID,新的应用程序实例应该识别出不存在具有该PID的进程,并在创建新进程之前立即删除锁定. strace将反复显示有问题的锁定文件,并增加退避时间,因为新进程会反复检查过时的锁定文件是否已被删除或者其他什么.所以,删除文件(例如,/ var / lock / LCK..ttyS0);如果您运行崩溃的应用程序,您将拥有锁定文件. 随机附注:如果您通过PyQt5在Python中使用QSerialPort(顺便说一句,它确实有效!),请确保在Python解释器退出之前已经显式删除了QSerialPort实例.如果你在IPython中操作端口,那么在退出之前执行“%xdel portobject”. 这是一个愚蠢的解决方法,但是如果您正在使用其他一些机制来确保您没有运行程序的两个实例并使用相同的端口 – 或者如果您根本不关心 – 您可以删除一行代码在打开端口之前锁定文件. 恕我直言,Qt不应该首先仿效完全没有价值的Windows风格的保姆国家保护.我可以sudo rm -rf /它发生了!我甚至可以使用串口.鉴于这种不受约束的,原始的,像神一样的力量,我应该能够随时打开一个串口,但是我请… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 视觉标记条件编译
- The Swift Beginner Series
- c# – 列出连接到单个LAN的所有计算机的IP地址
- System.Data.OleDb.OleDbException: 未指定的错误
- reactjs – 使用react-router从this.props.child
- ruby-on-rails – Ruby on Rails 3单表继承还是多
- 【VB/.NET】Converting VB6 to VB.NET 【Part II
- UIComponent.document是Application
- ruby-on-rails – 尝试使用collection_select显示
- 利用Dojo和JSON建立无限级AJAX动态加载的功能模块