情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

Overlay Weaver の timeoffset コマンドでシナリオをモジュール化する このエントリーを含むはてなブックマーク

Overlay Weaver のエミュレータシナリオに登場する「timeoffset」を使ってシナリオのモジュール化を行う方法をメモ。ちなみに、モジュール化だけでなく、待機なども表現できます。

Overlay Weaver の使い方」で解説したシナリオには「timeoffset」というコマンドがたくさん出てきます。これの意味がなかなか難しいのです。

scheduleコマンドの時刻指定は相対値

もともと「schedule」コマンドと組み合わせて効果を発揮するものなのですが、特に、「schedule」コマンドの時刻指定に影響を及ぼします。

実は「schedule」コマンドの時刻指定は、相対値の指定なのです。

どういうことかというと、たとえば次のように書いたとします。

schedule 100 controls 1 put key1 value1
schedule 200 controls 2 put key2 value2
schedule 300 controls 3 put key3 value3

すると、各行は「100msec後に実行」「200msec後に実行」「300msec後に実行」を表します。ここで、「後」というのが重要なのです。

timeoffsetを使わない限りは、「100msec後」は、「時刻0msecの100msec後」という意味であり、「時刻100msec」に実行という意味を表します。

timeoffsetは基準時刻を後ろにずらすコマンド

timeoffsetは、この「時刻○○msecの100msec後」の「○○」を後ろにずらす能力があります。つまり、

timeoffset 1000
schedule 100 controls 1 put key1 value1
schedule 200 controls 2 put key2 value2
schedule 300 controls 3 put key3 value3

とした場合は、timeoffsetを実行した最初の行で、基準となる時刻が「初期状態0msec + timeoffsetの引数1000msec」=「1000msec」となり、その後の行は「時刻1000msecの100msec後」「時刻1000msecの200msec後」「時刻1000msecの300msec後」を意味することになります。また、もし続きに

timeoffset 500
schedule 100 controls 4 put key3 value0

と書かれていた場合は、この2回目のtimeoffsetにより、基準となる時刻は「現在の基準1000msec + timeoffsetの引数500msec」となり、2行目は「時刻1500msecの100msec後」という意味となり、時刻1600msecに実行されることになるのです。

このように、timeoffsetは基準の時刻に引数分だけプラスするコマンドであり、基準の時刻の値を直接指定するものではないことに注意が必要です

実際的な使い方

schedule 0 controls 0 put key0 value0
schedule 100 controls 1 put key1 value1
schedule 200 controls 2 put key2 value2

schedule 300 controls 0 get key0
schedule 400 controls 1 get key1
schedule 500 controls 2 get key2

というシナリオを考えてみます。このとき、put3行とget3行をモジュール化したいと思います。 どういうことかというと、getの最初の行の「400」という数字はputの最後の時刻に依存しているので、putを変更するたびにgetの時刻まで変更する必要が出てきてしまうと言う依存関係を消し去りたいのです。

このときtimeoffsetが活躍します。つまり、putで消費する時間(300msec)をtimeoffsetの引数としてputの末尾にくっつけてあげると、getを0msecから始めることが出来るようになります。

schedule 0 controls 0 put key0 value0
schedule 100 controls 1 put key1 value1
schedule 200 controls 2 put key2 value2
timeoffset 300

schedule 0 controls 0 get key0
schedule 100 controls 1 get key1
schedule 200 controls 2 get key2

これにより、上半分と下半分をputとgetで分離できるようになりました。つまり、putを1行加えたときは、上半分の変更だけで済むわけです。

schedule 0 controls 0 put key0 value0
schedule 100 controls 1 put key1 value1
schedule 200 controls 2 put key2 value2
schedule 300 controls 3 put key3 value3
timeoffset 400

schedule 0 controls 0 get key0
schedule 100 controls 1 get key1
schedule 200 controls 2 get key2

まとめ

timeoffsetをうまく使ってシナリオをモジュール化すると、スクリプトを作るのが楽になります。 また、timeoffsetの値はかなり機械的に決まるので、シナリオを生成するオリジナルスクリプトを自分で作っている場合は、timeoffsetを最後に付け加えるようにしておくと良いと思います。

DHT | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。