我想用Python编写我自己的时钟对象。 我希望它非常非常准确。 我在Windows上阅读,我可以使用QueryPerformanceCounter()。 但是,如何? 我不知道任何C; 只有Python 2.x.
有人能给我一个关于如何在Python中使用这个提示来制作一个精确的时钟的提示吗?
我已经使用ctypes
模块移植了你给Python的C ++示例 :
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;
蟒蛇
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, eg 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()
。
示例与使用ctypes
完全相同:
import time starting_time = time.clock() # Activity to be timed, eg time.sleep(2) ending_time = time.clock() elapsed_microseconds = ending_time - starting_time elapsed_microseconds *= 1000000 print(elapsed_microseconds)
希望这可以帮助!