ナノ秒単位で計測可能な高精度タイマー機能を追加します。
基本情報
前提スクリプト
なし
拡張タイプ
△ 開発用 (導入するだけでは特に変化しない)
説明
概要
Win32APIを経由してナノ秒単位の高精度タイマー(QueryPerformanceCounter)を利用するためのモジュール Timer を提供します。主にベンチマークなど負荷の高い処理の所要時間の計測に利用します。
タイマーを利用するには例えば、以下のように記述します。
Timer.start # 計測開始
hogehoge() # なんらかの処理
Timer.count("hogehoge") # "hogehoge" という名前でカウント
foobar() # なんらかの処理
Timer.count("foobar") # "foobar" という名前でカウント
Timer.print # コンソールに結果を表示
メソッド
● Timer.get_count
システムから QueryPerformanceCounter の値を取得します。
時間を測りたい場合は下のメソッドを使ってください。
● Timer.start([symbol])
このメソッドを呼び出した時を起点として、タイマーの計測を始めます。
このメソッドはゲームの起動時に一度呼び出されるため、一度も呼ばなかった場合はゲーム起動時からの経過時間を使うことになります。
- symbolは省略可能ですが、任意のシンボルを指定することもできます。
- Timer.countなどで同じシンボルを指定することで、複数のタイマーを同時に使い分けることができます。
● Timer.time([unit[, digit[,symbol]]]
Timer.start からこのメソッド呼び出し時点までの経過時間を取得します。
- unit には :ns, :us, :ms, :s のいずれかのシンボルを指定します。順にナノ秒、マイクロ秒、ミリ秒、秒が計測単位として使われます。
- digit には計測値の小数点以下の桁数を指定します。
- symbol には、必要であれば Timer.start で指定したシンボルを指定します。
● Timer.count([name[, symbol]])
タイマーに計測ポイントを追加します。
- name には計測ポイントの名前を任意で指定しますが、特に指定しなくても構いません。
- 基本的には「この間に何をしたのか」を示す一言を入れておくとよいでしょう。
- symbol には、必要であれば Timer.start で指定したシンボルを指定します。
● Timer.get_time([unit[, symbol]])
Timer.start 以降に追加された計測ポイントの一覧を配列で返します。
- unit には :ns, :us, :ms, :s のいずれかのシンボルを指定します。順にナノ秒、マイクロ秒、ミリ秒、秒が計測単位として使われます。
- symbol には、必要であれば Timer.start で指定したシンボルを指定します。
- 返ってくる配列の各要素は、以下の形となっています。
[(名前), (Timer.startからの経過時間), (前回のTimer.countからの経過時間)]
この計測結果を見やすい形で得たいときは、下のメソッドを使います。
● Timer.get_time_str([unit[, digit[, symbol]]])
Timer.start 以降に追加された計測ポイントを、表形式の文字列として得ます。
- unit には :ns, :us, :ms, :s のいずれかのシンボルを指定します。順にナノ秒、マイクロ秒、ミリ秒、秒が計測単位として使われます。
- digit には計測値の小数点以下の桁数を指定します。
- symbol には、必要であれば Timer.start で指定したシンボルを指定します。
● Timer.print([unit[, digit]])
計測結果をコンソールに表示します。
print(Timer.get_time_str(unit, digit)) と同じです。
備考
再定義されるメソッド
なし
設定項目
なし
更新履歴
- 2020/12/28 タイマーを複数同時に使えるように変更(symbolの部分)
- こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
- 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
- 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
最終更新:2020年12月28日 21:37