QT 使用 QTcpSocket來檢測 ip 設備的網絡狀態

使用QT中 QTcpSocket來檢測設備的網絡狀態:

函數返回true,設備網絡狀態正常,返回false,設備網絡異常。

bool TcpIpSocket::sendATcpSocketToIp(QString ip){
    m_ipAdress = ip;
    abort();
    connectToHost(m_ipAdress, port);
    //等待timeout時間,如果仍然不通,則異常
    return waitForConnected(timeout);
}

要實現實時一直檢測,使用while:

    runWhile = true;    runBreak = false;
    bool retPing;
    while(runWhile){
        retPing = m_senderAgent.sendATcpSocketToIp(ipAdress);
        if(retPing == true){
            //ping 成功,目標ip網絡正常,發送commandSuccessed
            emit commandSuccessed();
        }else{
            //ping 失敗,目標ip網絡不正常,發送commandFailed
            emit commandFailed();
        }

        sleep(1000);    // sleep 1s

        if(runBreak){
            break;
        }
    }//end of while

       運行中還存在問題的是,假如使用另外一個函數,在某個時刻觸發,使runBreak = true ,或者 runWhile = false,但是這個while仍然一直循環執行,不會跳出,但是當註釋掉sleep(1000)後,while就會跳出。但是註釋掉sleep(1000)後,該while會佔用大量cpu資源全力發送數據包(這個不是想要的,只能兩害取其輕了)。

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