NXTプログラミング(10)


今回でNXTプログラミングの最終回の予定である。
マルチスレッドに慣れていない人向けのアドバイス


SendMessage/LSRead/LSWriteなど、通信はすべてblockingされうる。Bluetooth経由で秒間30回の往復のやりとりが出来るということは、片道1/60秒程度ではあるのだが、I2C接続の超音波センサーのようにレスポンスに時間のかかるデバイスもあるし、通信障害が起こったりするとそこでもblockingされる。


ゆめゆめGUIスレッドで通信を行なわないこと。NXTとの通信専用のworker threadをNXTの数だけまわすべきである。worker threadのほうでは、Thread.Sleep(5)などをloopのなかに入れたbusy loopを書く。


距離についても次々にデータを取得したい場合は、worker threadを回すためのメソッドを書くclassに「距離を定期的に取得してくれ」というboolの(C#的な意味の)propertyを用意して、こいつがtrueならworker threadは定期的に距離を取得してきて、byte distanceなどのpropertyに反映させる作りになっているべきである。


モーターの移動に関しても、「どこそこまで移動させてくれ」とworker threadにお願いすれば、あとは(自分の制御したい装置に見合うような方法で)worker threadがうまく制御してくれると呼び出し側は楽になるだろう。