[英]using ansi-c on windows platform can i get time of system upto milliseconds accuracy?
[英]i need a real time clock in ansi c which provide an accuracy upto miliseconds?
我需要 ansi c 中的實時時鍾,它可以提供高達毫秒的精度?
我正在 Windows 上工作,Windows 基礎庫也可以提前接受。
在 ANSI C 中,您無法確定底層系統提供的精度以毫秒為單位。 但是,為了獲得最大的細節,您可以使用clock()
函數返回自進程啟動以來的時間,以滴答為單位,其中滴答的持續時間由CLOCKS_PER_SEC
定義:
#include <time.h>
double elapsed; // in milliseconds
clock_t start, end;
start = clock();
/* do some work */
end = clock();
elapsed = ((double) (end - start) * 1000) / CLOCKS_PER_SEC;
來自 GNU 的文檔。
你不能用 C11 之前的可移植代碼來做到這一點。
從 C11 開始,您可以使用timespec_get
,它通常(但不一定)提供毫秒或更好的分辨率。 從 C23 開始,您可以調用timespec_getres
來查找提供的分辨率。
由於您使用的是 Windows,因此您需要開始意識到 Windows 不是實時系統,因此您所做的任何事情都不能真正保證准確。 也就是說,您可以從timeBeginPeriod(1);
開始timeBeginPeriod(1);
將多媒體計時器分辨率設置為 1 毫秒。 然后,您可以調用timeGetTime()
以 1 毫秒的分辨率檢索當前時間。 完成計時后,您可以調用timeEndPeriod(1)
將計時器分辨率設置回默認值。
ANSI C clock() 將為您提供毫秒的精度,但不是精度,因為這取決於窗口的系統時鍾,其精度為 50 毫秒或該范圍附近的某個地方。 如果您需要更好的東西,那么您可以使用 Windows API QueryPerformanceCounter ,它也有自己的警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.