現在、ロボットで作業中です。私はEV3レゴレンガを使用しています。私の目標は、最短経路を使ってtravelTo(x、y)メソッドを使ってA点からB点に移動することです。このメソッドはスレッド名Driveにあり、私のロボット(turnTo(double angle)、travel(double distance)、travelTo(double x、double y)、changeSpeed(int newSpeed))の動きを制御するためのすべてのメソッドが含まれています。 ..)。 私はObstacleAvoidanceと呼ばれる別のスレッドを持っています。これは、障害物が前面にある場合にスレッドドライブを停止し、障害物に追従するためにPコントローラ技術を使用して障害物を回避することを開始します。マルチスレッドの問題 - 使用するメソッドのJAVA thread.wait()
私の問題は、私のPコントローラがスレッドドライブ内のメソッドを使用していることです。したがって、障害が発生したら私はできません:
if (obstacle){
Drive.wait();
while(isAvoiding){
pControler();
}
}
Drive.Notify();
private void pController(){
//use methods inside the DriveThread
}
どうすればこの問題を回避できますか?言い換えれば、私はどのように私のロボットの現在のアクションを停止し、ブロックを避け、私がやっていたことを続けることができますか?
ここで 'java.lang.Thread'sについて話していますか?なぜなら、あなたはスレッドオブジェクトに対して 'wait()'と 'notify()'を呼び出すはずがないからです。 – biziclop
メソッドはオブジェクト上にあり、そのオブジェクトが別のスレッドによって呼び出されたスレッドからそれを停止してはならないかどうかを表します。そして、機能する前に他のものを停止しなければならない場合、なぜ機能を2つのスレッドに分割するのですか?私はロボット工学について何も知らないが、これは物事がどのように整理されているのか疑問に思う。 –