C# C-在没有计时器的情况下随时间推移查看队列。可能吗?
我当前的代码是在一个计时器内,用来比较所有无人机的实际位置是否接近所需位置,但我认为这不是最好的方法,因为我认为这会导致处理速度变慢 是否有一种方法可以检查实际位置是否接近所需位置,而无需在计时器内使用peekC# C-在没有计时器的情况下随时间推移查看队列。可能吗?,c#,C#,我当前的代码是在一个计时器内,用来比较所有无人机的实际位置是否接近所需位置,但我认为这不是最好的方法,因为我认为这会导致处理速度变慢 是否有一种方法可以检查实际位置是否接近所需位置,而无需在计时器内使用peek 您只能在无人机位置更新时进行检查,而不是在每次滴答声时。这样,您也可以跳过偷看,让更新无人机位置的代码将更新后的无人机对象传递给您的检查功能。drone\u实际位置每秒更新30次。@user7569125:您确实有一些读取无人机位置的代码,对吗?例如,从网络或类似渠道。此代码类似于伪代码
您只能在无人机位置更新时进行检查,而不是在每次滴答声时。这样,您也可以跳过偷看,让更新无人机位置的代码将更新后的无人机对象传递给您的检查功能。drone\u实际位置每秒更新30次。@user7569125:您确实有一些读取无人机位置的代码,对吗?例如,从网络或类似渠道。此代码类似于伪代码var message=ReadNextMessage;ifmessage.Type==Movement{drones[message.DroneID].Position=message.NewPosition;}由于这里有一个对已移动的无人机的引用,您还可以执行类似于CheckIfNeardrone;职位分配后。
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();
}
}