3 回答

TA貢獻1890條經驗 獲得超9個贊
我猜你正在使用VS2012;如果不是,請忽略此答案。VS2012 typedef的high_resolution_clock到system_clock??杀氖牵@意味著它的精度很差(大約1毫秒)。我寫了一個更好的高分辨率時鐘,QueryPerformanceCounter用于VS2012。
HighResClock.h:
struct HighResClock
{
typedef long long rep;
typedef std::nano period;
typedef std::chrono::duration<rep, period> duration;
typedef std::chrono::time_point<HighResClock> time_point;
static const bool is_steady = true;
static time_point now();
};
HighResClock.cpp:
namespace
{
const long long g_Frequency = []() -> long long
{
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
return frequency.QuadPart;
}();
}
HighResClock::time_point HighResClock::now()
{
LARGE_INTEGER count;
QueryPerformanceCounter(&count);
return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency));
}
(我省略了一個斷言和#ifs來查看上面的代碼是否在2012年對其進行了編譯)
您可以在任何地方以與標準時鐘相同的方式使用此時鐘。

TA貢獻1824條經驗 獲得超6個贊
時鐘的分辨率不一定與可由時鐘使用的數據類型表示的最小持續時間相同。在這種情況下,您的實現使用的數據類型可以表示持續時間僅為100納秒,但是底層時鐘實際上沒有這樣的分辨率。
high_resolution_clock多年來,Visual Studio的低分辨率一直是一個問題。微軟的C ++標準庫維護者Stephan T. Lavavej 表示,這已在VS2015中通過使用進行了修復QueryPerformanceCounter()。

TA貢獻1836條經驗 獲得超13個贊
也許實現未實現更高分辨率的計時器?
似乎您正在使用Windows(提到C#),因此,如果您使用計時器,并且確實在使用Windows,則可以使用QueryPerformanceFrequency和QueryPerformanceCounter。
- 3 回答
- 0 關注
- 1000 瀏覽
添加回答
舉報