定时扫描串口看设备是不是连接在QT、QSerialPort
Posted
技术标签:
【中文标题】定时扫描串口看设备是不是连接在QT、QSerialPort【英文标题】:Scanning the serial port periodically to see if the device is connected in QT, QSerialPort定时扫描串口看设备是否连接在QT、QSerialPort 【发布时间】:2015-12-25 19:04:41 【问题描述】:我正在尝试定期扫描我的串行端口以查看我的设备是否已连接。这是我所做的,效果很好。我想看看是否有更好的优化方法。
我在构造函数中创建了以下计时器来经常检查串行端口。我做了一个方法 (scanSerialPorts()
) 并每隔 1 秒调用一次。
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(scanSerialPorts()));
timer->start(1000);
这是我的scanSerialPorts()
实现:
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
currentPortName = info.systemLocation();
if (currentPortName == "My Desired PortName" )
updateSettings();
if ( !serial->isOpen())
qDebug() << "Serial Not Open";
openSerialPort();
else
serial->close();
updateSettings(); // Fills up the serial port parameters.
openSerialPort(); //Opens up the serial port.
我用 QT 例子来写这个。请让我知道您的想法以及我可以如何做得更好。
【问题讨论】:
【参考方案1】:-
实际上,您只扫描最后一个端口,因为其余代码在
foreach
loop 之外;
您关闭了其他(可能未打开)端口,而不是您正在打开的端口
很可能,availablePorts
在执行期间不会更改,因此您可以将其移到扫描函数之外以节省计时器中的一些处理时间。 updateSettings()
也是如此。
【讨论】:
以上是关于定时扫描串口看设备是不是连接在QT、QSerialPort的主要内容,如果未能解决你的问题,请参考以下文章