使用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

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