buffer = socket->readAll();
anticollision(buffer,carArray);//資料轉換
if(learnFlag)
{
ui->textEdit_recv->setText("開始預警");
if(ui->LeftButton->isChecked()==true)
earlyWarningLeft(carArray,border); //判斷資料是否不符合規定
else
if(ui->RigthButton->isChecked()==true)
earlyWarningRight(carArray,border);//判斷資料是否不符合規定
}
void earlyWarningLeft(carData carArray[64],int border[64])
{
for(int i=0;i<64;i++)
if(border[i]<carArray[i].x)
warming();
}
想讓warming()隔5秒才報警一次,但是readAll()正常運行。sleep()又會導致整個程式的阻塞。
uj5u.com熱心網友回復:
創建一塊快取,放這5秒要存的資料。socket的相關操作扔執行緒去,可以不阻塞UI。此執行緒把要處理的東西扔快取就完事。
報警的做成單獨的執行緒 sleep 5秒或者QTimer 間隔5s觸發, 執行:讀取緩沖的待使用訊息然后處理,處理完清空。(多執行緒記得加鎖)
uj5u.com熱心網友回復:
使用QTimer轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/280410.html
標籤:Qt
下一篇:在使用Android Studio開發谷歌地圖時,出現缺失com.google.android.maps包怎么解決?
