リスナーの削除 [python]
リスナーのスクリプトをテストしていて困ったことに、設定したリスナーは自分で消さない限り、スクリプトを実行するたびにどんどんと蓄積されていきます。
kill出来ないので。
スクリプトを実行し、不具合など訂正、再度実行すると前のスクリプトの動作も残ってしまっていて、多重に動作します。
そのたびにアプリを起動し直すのは手間ですので、センサーを取り除くスクリプトを追加しました。
リスナーを追加したスクリプトに加えておかないと上手く動作しないようです。
sensors.provideSensor(i).addPropertyChangeListener(d)
addを
sensors.provideSensor(i).removePropertyChangeListener(d)
removeにかえて、登録したのと同じforループを回します。
これをIS26センサーのリスナーにしておきます。
class delListener(java.beans.PropertyChangeListener):
def propertyChange(self, event):
if event.newValue == 2:
sensors.provideSensor("IS26").setState(4)
for i in singoList:
signals.getSignalHead(i).removePropertyChangeListener(b)
for i in memoriList:
memories.provideMemory(i).removePropertyChangeListener(a)
for i in sensList:
sensors.provideSensor(i).removePropertyChangeListener(d)
sensors.provideSensor("IS26").removePropertyChangeListener(e)
print "remove all listener!"
e = delListener()
sensors.provideSensor("IS26").addPropertyChangeListener(e)
リスナーの使い方をご紹介してきました。
これで各パーツは出来上がりましたので、これらをマージして実際の制御に使ってみます。
と言いますのも、実は動作するかはバーチャルモードでprintの出力で見ていただけなんです。
ある程度動く状態まで持っていかないと、列車が制御不能になると怖いですから。。。
明日からは、怖々の実車でのテストです。
リスナー 、、、 なんだか仕事の事を思い出してしまいます(笑) でも、こういう仕組みが絶対に必要なのですよね。 非常に興味深く拝見しています。 pururuさんが実現されている事は、今後の鉄道模型に非常に大きなインパクトを与える事だと思います。 いつの日か書籍になるのでは???
by S204 (2013-05-26 17:23)