亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用QueryPerformanceCounter?

如何使用QueryPerformanceCounter?

C++
手掌心 2019-07-02 09:59:56
如何使用QueryPerformanceCounter?我最近決定,我的計時器類需要從使用毫秒改為微秒,經過一些研究后,我認為QueryPerformanceCounter可能是我最安全的賭注。(對.的警告Boost::Posix它可能不能在Win 32 API上工作,這讓我有點猶豫)。但是,我不太確定如何實現它。我所做的就是管它叫什么GetTicks()我正在使用的esque函數,并將其分配給Timer的startingTicks變量。然后,為了找出傳遞的時間,我只需將函數的返回值從startingTicks,當我重置計時器時,我只需再次調用函數并將startingTick分配給它。不幸的是,從我看到的代碼來看,它并不像調用QueryPerformanceCounter(),我不知道我應該通過什么作為它的論點。
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

我使用這些定義:

/** Use to init the clock */#define TIMER_INIT \
    LARGE_INTEGER frequency; \
    LARGE_INTEGER t1,t2; \    double elapsedTime; \    QueryPerformanceFrequency(&frequency);/** Use to start the performance timer */#define TIMER_START QueryPerformanceCounter(&t1);/** Use to stop the performance timer and output the result to the standard stream. Less verbose than \c TIMER_STOP_VERBOSE */#define TIMER_STOP \    QueryPerformanceCounter(&t2); \
    elapsedTime=(float)(t2.QuadPart-t1.QuadPart)/frequency.QuadPart; \
    std::wcout<<elapsedTime<<L" sec"<<endl;

用法(括號以防止重新定義):

TIMER_INIT{
   TIMER_START   Sleep(1000);
   TIMER_STOP}{
   TIMER_START   Sleep(1234);
   TIMER_STOP}

使用示例的輸出:

1.00003 sec
1.23407 sec


查看完整回答
反對 回復 2019-07-02
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

假設你在Windows上(如果是這樣的話,你應該把你的問題標記成這樣!)此MSDN頁面您可以找到一個簡單、有用的源。HRTimerC+類,它封裝所需的系統調用來執行非常接近您所需的事情(添加一個GetTicks()方法,特別是要做的事情。一點兒沒錯你所需要的)。

在非Windows平臺上,沒有QueryPerformanceCounter函數,因此解決方案不能直接移植。但是,如果您確實將其包裝在一個類中,如上面提到的HRTimer,將類的實現更改為使用當前平臺確實能夠提供的功能(可能通過Boost或其他方式)會更容易。


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 1174 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號