2016-07-19 17 views
4

Pythonを使用して自分の時計オブジェクトをプログラミングしたいと思います。私はそれが非常に正確であることを望みます。私はWindowsでそれを読んで、私はQueryPerformanceCounter()を使うことができました。しかしどうですか?私はCを知らない。 Python 2.xのみ。Python 2.x - WindowsのQueryPerformanceCounter()

誰かに私がPythonでこれを使ってWinで正確な時計を作るためのヒントを教えてもらえますか?

+0

「QueryPerformanceCounter()」はどこですか? Windows API? – linusg

+0

はい - https://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v=vs.85).aspx –

+0

ありがとうございます。私は今いくつかのテストをしています、私はいくつかのminustesのソリューションを持っていると確信しています。見てください:) – linusg

答えて

4

は私が移植されてきたC++ exampleあなたは​​モジュール使ってPythonに与えてくれた:

C++

LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds; 
LARGE_INTEGER Frequency; 

QueryPerformanceFrequency(&Frequency); 
QueryPerformanceCounter(&StartingTime); 

// Activity to be timed 

QueryPerformanceCounter(&EndingTime); 
ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart; 

ElapsedMicroseconds.QuadPart *= 1000000; 
ElapsedMicroseconds.QuadPart /= Frequency.QuadPart; 

Pythonの

import ctypes 
import ctypes.wintypes 
import time 

kernel32    = ctypes.WinDLL('kernel32', use_last_error=True) 

starting_time  = ctypes.wintypes.LARGE_INTEGER() 
ending_time   = ctypes.wintypes.LARGE_INTEGER() 
elapsed_microseconds = ctypes.wintypes.LARGE_INTEGER() 
frequency   = ctypes.wintypes.LARGE_INTEGER() 

kernel32.QueryPerformanceFrequency(ctypes.byref(frequency)) 
kernel32.QueryPerformanceCounter(ctypes.byref(starting_time)) 

# Activity to be timed, e.g. 
time.sleep(2) 

kernel32.QueryPerformanceCounter(ctypes.byref(ending_time)) 

elapsed_microseconds = ending_time.value - starting_time.value 
elapsed_microseconds *= 1000000 
elapsed_microseconds /= frequency.value 

print(elapsed_microseconds) 

私は本当に便利に感謝を@eryksunのヒント

上記のコードは、2000000の近くに何かを印刷する必要があります(例:2000248.7442040185、値は時々異なる場合があります)。小数を取り除くためにround()またはint()関数を使用することもできます。

@eryksunがコメントしたように、time.clock()も使用できます。これはC言語で実装されており、QueryPerformanceCounter()も使用しています。

例​​を使用して1と全く同じことをやって:

import time 
starting_time = time.clock() 

# Activity to be timed, e.g. 
time.sleep(2) 

ending_time = time.clock() 

elapsed_microseconds = ending_time - starting_time 
elapsed_microseconds *= 1000000 

print(elapsed_microseconds) 

・ホープ、このことができます!

+0

あなたの努力のおかげで多くの感謝が、私はそれを推測するCを学習せずに動作させることはできません。私はあなたが提供した回避策を解決することができないので、Cタイプについてはわかりません –

+0

Hmm ok。あまりにもあなたが周りにいる場合、私はより多くのアイデアを持っている場合、私はあなたにコメントすることができます。 – linusg

+0

私は、これらのc_longlong_Array_1オブジェクトが繰り返し可能であることを知りました。obj [0]は私が考える時間値です: "ElapsedMicroseconds = EndingTime [0] - StartingTime [0]" –

関連する問題