使用date设置系统时间 定时器elapsed()获取结果错误 分析

环境:

linux系统下的界面开发:Qt 4.8.6

问题阐述:

1、功能点:(1)设备在5分钟内无操作后,会自动关机:创建了一个定时器,通过elapsed()函数检测时间是否累计到300s,累计到300s之后设备自动关机

                    (2)设置界面的时间选项,用户可更改系统时间,程序会通过下发Date命令将用户设置的系统时间设置到系统中去

2、问题现象:相应用户设置系统时间的保存信号后,设备立马自动关机

代码分析:

先执行SetDatetimeA6G2C函数

void PublicMethod::SetDatetimeA6G2C(QDateTime datetime)//设置系统的日期时间
{
    QString timeStr = datetime.toString("yyyy-MM-dd HH:mm:ss");
    QString cmdLine = "date -s \""+timeStr+"\"";
    ExecuteCmdLine(cmdLine);
    ExecuteCmdLine("hwclock -w &");
}

再执行 OperateMachine

void PublicMethod::OperateMachine() //操作了仪器
{
    int msecs = s_timeLastOperate.elapsed();
    quint64 newTotalRunSec = s_nu64TotalRunSec+(msecs/1000)+(msecs%1000>500?1:0);
    SetLocalTotalRunSec(newTotalRunSec);
    s_timeLastOperate.restart();
}

连接信号如下:

每3000ms触发一次槽函数,判断累计无操作时间是否超过3000ms

在判断过程中使用了elapsed()函数

void Dialog_Sample::initAutoPowerOffTimer()
{
    m_timerAutoPowerOff = Singletons::GetGlobalAutoPowerOffTimer();//new QTimer(this);
    connect(m_timerAutoPowerOff, SIGNAL(timeout()), this, SLOT(autoPowerOff()));
    m_timerAutoPowerOff->start(3000);
}
void Dialog_Sample::autoPowerOff()
{
    if(PublicMethod::s_timeLastOperate.elapsed() >= 300000)
    {
        //PublicMethod::OperateMachine();
        PublicMethod::ClearPowerOffValue();
        if(Singletons::GetGlobalWifiManager()->GetConnectStatus() != false &&  Singletons::GetGlobalNetworkServer()->GetClientConnectState() != false)
        {
            //WIFI连接,socket也连接,说明正在互联,不关机
            return;
        }

        //正在采样不关机
        if(m_bStart)
        {
            return;
        }

        Singletons::GetGlobalAuditTrailBusinessLogic()->PowerOff();
        PublicMethod::Shutdown();
    }
}

问题原因:

当Date设置时间后,elapsed()函数获取到的值不正确,导致

if(PublicMethod::s_timeLastOperate.elapsed() >= 300000)

条件成立,执行关机命令,设备关机

所以,不能在使用elapsed()函数时 使用Date设置系统时间,否则elapsed()函数获取的值是错误的

该问题现象出现在 用Date命令将时间设置为原系统时间之前的时候, 用Date命令向后设置时间不会出现这种情况

参考文献:

https://blog.csdn.net/beyondfengyu/article/details/52202860

https://zhidao.baidu.com/question/2143809393412312788.html

https://blog.csdn.net/founderznd/article/details/51442629

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章