2007年02月24日

RubyでQueryPerformanceCounter

Rubyから、高精度のタイマーのWindowsAPI、QueryPerformanceCounterを呼び出すメモ。

使用した関数:
QueryPerformanceCounter:カウンタの取得
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_queryperformancecounter.asp

QueryPerformanceFrequency:カウンタの周波数の取得
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_queryperformancefrequency.asp


# ---------------------------------
# QueryPerformanceCounterのサンプル
# ---------------------------------
require 'Win32API'

# 関数からオブジェクトを作成する
qpc = Win32API.new('kernel32.dll','QueryPerformanceCounter','p','i')
qpf = Win32API.new('kernel32.dll','QueryPerformanceFrequency','p','i')

# LARGE_INTEGER(64bit)の領域を用意する
count = [0].pack('Q')
freq = [0].pack('Q')

# 周波数の取得
qpf.call(freq)

# カウンタの取得
qpc.call(count)

# 返された値を、数値型に変換する
count_val = count.unpack('Q')[0]
freq_val = freq.unpack('Q')[0]

# 値の表示
puts Float(count_val)/freq_val

posted by mypc at 01:07| Comment(1) | TrackBack(0) | 日記