1. 程式人生 > >Ubuntu中基於QT的系統網線連線狀態的實時監視

Ubuntu中基於QT的系統網線連線狀態的實時監視

1.必要準備

         需包: #include <QNetworkInterface>

2.實現獲取當前的網線連線狀態

       以下是自己在網路上搜到的一個解決方法,且沒有加入iface.flags().testFlag(QNetworkInterface::IsRunning) 這一邏輯判斷,經測試實時性極不可靠,在虛擬機器裡除錯時發現有時候有10s左右的延遲,但執行在嵌入式系統上時幾乎就是一擺設。於是自己閱讀QT幫助嘗試了多種方法並加以改造,發現加入了第二項條件判斷後,結果就非常的可靠了。

bool isConnectedToNetwork()
{
    QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
    bool isConnected = false;

    for (int i = 0; i < ifaces.count(); i++)
    {
        QNetworkInterface iface = ifaces.at(i);
        if ( iface.flags().testFlag(QNetworkInterface::IsUp)
             && iface.flags().testFlag(QNetworkInterface::IsRunning)
             && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)
              )
        {

            // this loop is important
            for (int j=0; j<iface.addressEntries().count(); j++)
            {
                // we have an interface that is up, and has an ip address
                // therefore the link is present

                // we will only enable this check on first positive,
                // all later results are incorrect
                if (isConnected == false)
                    isConnected = true;
            }
        }

    }

    return isConnected;
}

3. 實時性監測實現

    實時性的實現是利用了QT的定時器和訊號與槽機制。這個大家甚至比我都清楚,就不囉嗦了。