簡體   English   中英

我需要 ansi c 中的實時時鍾,它可以提供高達毫秒的精度?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM