2016-04-01

shiny fluid example

昨日shinyに追加されたfluid dynamicsのexampleが
とてもgolangらしくてよい。

・main()はイベント処理に集中、図の作成は別のgoroutineで行う
・Crosses(StageVisible)で表示中かどうかの判定
・マウスイベントや図の情報は共有データとし、MutexでLock/Unlock
・表示中はtickerで60Hz毎にsimulate()を回す
 (1/60秒毎に発火するchannelを使用)
・非表示中は短絡させ、simulateを行わないようにする
・図ができたらchannel経由でイベントを送る
 (マウスやキーボードのイベントと同列で他のgoroutineがイベントを発火できる)

特に最後のポイントは結構肝だと思っている。
これまでいくつかのGUIライブラリを触ってきたが、
golangでchannel経由のイベント処理をちゃんと実装して
いたものはなく、ほとんどがコールバックだった。

stでもchannelでイベント処理の振り分けを行っているが、
こういうことができると全体の見通しがよくなってすてきだ。

No comments:

Post a Comment