2017-02-15 36 views
-2

我當前的代碼是一個計時器內保持比較if all drones actual position is near desired position但我不認爲這是最好的方法,因爲我認爲這會導致降低處理速度。C# - Peek隊列隨着時間的推移沒有計時器。可能嗎?

有沒有一種方法來檢查,如果實際位置靠近期望的位置,而無需使用定時器裏面偷看?

private void timer_missao_Tick(object sender, EventArgs e) 
    { 
     string[] pontos_separados = null; 

     for (int k = 0; k < drone.Length; k++) 
     { 
      if (queue[k].Count > 0) 
      { 

       if (queue[k].Peek() == "levantar") 
       { 
        drone[k]._droneClient.FlatTrim(); 
        drone[k]._droneClient.Takeoff(); 
        drone[k].subir_ate_altura = true; 
        queue[k].Dequeue(); 


       } 


       else if (queue[k].Peek().Split(null)[0] == "goto") 
       { 
        pontos_separados = queue[k].Peek().Split(null)[1].Split(','); 
        drone[k].posicao_desejada = new PointF(Convert.ToSingle(pontos_separados[0]), Convert.ToSingle(pontos_separados[1])); 

        int precisao = 5; 

        if (drone.All(d=> d.pos_atual().X > d.pos_desej().X - precisao && d.pos_atual().X <d.pos_desej().X + precisao && 
         d.pos_atual().Y > d.pos_desej().Y - precisao && d.pos_atual().Y < d.pos_desej().Y + precisao)) 
        { 
         for (int i = 0; i < drone.Length; i++) 
         { 
          queue[i].Dequeue(); 
         } 

        } 
       } 
       else if (queue[k].Peek() == "aterrar") 
       { 

        drone[k]._droneClient.Land(); 

        if (drone[k]._droneClient.NavigationData.State == NavigationState.Landed) 
        { 
         queue[k].Dequeue(); 
        } 
       } 

回答

0

你可以做的檢查只當無人駕駛飛機位置的更新,而不是所有的蜱。這樣,你也可以通過具有更新無人機位置經過更新的雄蜂對象支票函數的代碼跳過Peek

+0

drone_actual位置被更新每秒30次。 – user7569125

+0

@ user7569125:嗯,你確實有一些代碼,讀取無人駕駛飛機位置,對不對?例如。來自網絡或類似者。這個代碼就像這樣的僞代碼'var message = ReadNextMessage(); if(message.Type ==「Movement」){drones [message.DroneID] .Position = message.NewPosition; }'既然在這裏你必須已經移動無人機的參考,你也可以這樣做'CheckIfNear(無人機);'了'Position'分配之後。 –

相關問題