Jump to content

QueryPerformanceCounter Demystified


Recommended Posts

#NoTrayIcon
Opt('GUIOnEventMode',1)

GUICreate('System Uptime')
Global $label = GUICtrlCreateLabel(' hrs  min  sec  cts' & @CRLF & '(freq:  Hz)',0,0,400)
Global $kern32 = DllOpen('Kernel32.dll')
Global Const $freq = DllCall($kern32, 'bool', 'QueryPerformanceFrequency', 'Int64*', Null)[1]
GUICtrlSetFont($label, 9, 0, 0, "Consolas")
GUISetState()
GUISetOnEvent(-3,Quit)
Local $tick,$sec
While Sleep(10)
      $tick = DllCall($kern32, 'bool', 'QueryPerformanceCounter', 'Int64*', Null)[1]
      $sec = $tick/$freq
      GUICtrlSetData($label, Int($sec/3600) & ' hrs ' & Int(Mod($sec,3600)/60) & ' min ' & Int(Mod($sec,60)) & ' sec ' & Mod($tick,$freq) & ' cts' & @CRLF & '(freq: ' & $freq & ' Hz)')
WEnd

Func Quit()
     DllClose($kern32)
     Exit
EndFunc

1. QueryPerformanceFrequency stays the same from system launch, so treat it as a constant

2. QueryPerformanceCounter is in cycles counts since system launch, so it is a reliable timestamp since the frequency reference doesn't change

Edited by AutoXenon
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...