您好,登錄后才能下訂單哦!
使用QT中 QTcpSocket來檢測設(shè)備的網(wǎng)絡(luò)狀態(tài):
函數(shù)返回true,設(shè)備網(wǎng)絡(luò)狀態(tài)正常,返回false,設(shè)備網(wǎng)絡(luò)異常。
bool TcpIpSocket::sendATcpSocketToIp(QString ip){ m_ipAdress = ip; abort(); connectToHost(m_ipAdress, port); //等待timeout時間,如果仍然不通,則異常 return waitForConnected(timeout); }
要實現(xiàn)實時一直檢測,使用while:
runWhile = true; runBreak = false; bool retPing; while(runWhile){ retPing = m_senderAgent.sendATcpSocketToIp(ipAdress); if(retPing == true){ //ping 成功,目標(biāo)ip網(wǎng)絡(luò)正常,發(fā)送commandSuccessed emit commandSuccessed(); }else{ //ping 失敗,目標(biāo)ip網(wǎng)絡(luò)不正常,發(fā)送commandFailed emit commandFailed(); } sleep(1000); // sleep 1s if(runBreak){ break; } }//end of while
運(yùn)行中還存在問題的是,假如使用另外一個函數(shù),在某個時刻觸發(fā),使runBreak = true ,或者 runWhile = false,但是這個while仍然一直循環(huán)執(zhí)行,不會跳出,但是當(dāng)注釋掉sleep(1000)后,while就會跳出。但是注釋掉sleep(1000)后,該while會占用大量cpu資源全力發(fā)送數(shù)據(jù)包(這個不是想要的,只能兩害取其輕了)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。