私は現在Lego NXT 2.0
、leJOS 0.9.1 beta
ファームウェアを使用してプログラミングしています。
カラーセンサーや超音波センサーなど、いくつかの異なるセンサーがあります。
壁にぶつかるまで、whileループを使用してロボットを前進させています。しかし、何らかの理由で、私はこのアプローチが好きではなく、代わりにリスナーを実装したかったのです。ただし、leJOS開発者は、リスナーモデルの使用は推奨されておらず、代わりにスレッドを使用して超音波センサーの値をポーリングする必要があると書いています。
ここで、whileループを使用した実装が実際にどれほど悪いか(リソースの浪費のようにオペレーティングシステムに関して)、スレッドモデルがどのように有益(および実装)になるのか疑問に思っていますか?
MWE:
public class SensorTest {
static UltrasonicSensor sonic;
static DifferentialPilot pilot;
public static final int DISTANCE = 20;
public static void main(String[] args){
sonic = new UltrasonicSensor(SensorPort.S1);
pilot = new DifferentialPilot(8.5, 25, Motor.C, Motor.B);
int i = 0;
while (i < DISTANCE) {
pilot.forward();
i = sonic.getDistance();
}
pilot.stop();
}
}