用Qt编写一些涉及到步骤类的程序,例如,有这样一个需求,用程序去控制程控一台电源,反复给一块带测试的板卡上下电,检查被测板卡能否正常启动(正常启动的标志,是通过网口能否ping通)。
像这样的非常典型的步骤,先初始化串口,从串口输出控制电源上电,延时50s后,检查ping命令的返回值,如果是通的,延时5s从串口输出控制电源下电,再从串口输出控制电源上电,再检查ping通,如此循环,在Qt里,编写这类1、2、3步骤类型的项目:
首先考虑到使用多线程,但是多线程有一件麻烦事,就是“跨线程调用”,但是又肯定在线程里去处理网口、文件等的读写,没有什么好的解决办法;
第二个思路就是使用定时器,例如开启一个60s定时器,60s是认为整个步骤全部走完的时间,这是可以完成功能的,但是整个步骤完成时间60s,有些奢侈浪费,测试步骤里没那么紧凑;
第三个思路,是直接在界面按钮的【开始测试】里写步骤流程,你会说那不会把GUI给耗死嘛,是的,自己写一个这样的延时Sleep函数,让它自己去卷吧,反正GUI界面不卡就行!
void mySleep(int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
然后按钮动作就是这样的流程(伪代码)
void Widget::on_button_clicked()
{
//测试前的准备
//开始测试
while(1)
{
//启动串口,去控制电源上电
//启动网口,去检查ping通?
//不通,退出结束
//ping通,输出串口关闭电源,继续通过串口给电源上电
//延时
mySleep(2)
}
}
程序实现思路,即简单又直观,功能性能都能实现且有保障,多写这样的程序。