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

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

容易測量過的時間

容易測量過的時間

皈依舞 2019-06-27 16:33:51
容易測量過的時間我試著用時間()來測量我節目的各個方面。我不明白的是,為什么前后的值是一樣的?我知道這不是最好的方式來分析我的程序,我只是想看看需要多長時間。printf("**MyProgram::before time= %ld\n", time(NULL));doSomthing();doSomthingLong();printf("**MyProgram::after time= %ld\n", time(NULL));我試過:struct timeval diff, startTV, endTV;gettimeofday(&startTV, NULL); doSomething();doSomethingLong();gettimeofday(&endTV, NULL); timersub(&endTV, &startTV, &diff);printf("**time taken = %ld %ld\n", diff.tv_sec, diff.tv_usec);我如何讀到**time taken = 0 26339?這是否意味著26,339納秒=26.3毫秒?關于**time taken = 4 45025,這是否意味著4秒25毫秒?
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

#include <ctime>void f() {
  using namespace std;
  clock_t begin = clock();

  code_to_time();

  clock_t end = clock();
  double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;}

這個time()函數只能在一秒鐘內精確,但是CLOCKS_PER_SEC“時鐘”在一秒鐘內。這是一個簡單的,便攜的測量,盡管它過于簡化。


查看完整回答
反對 回復 2019-06-27
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

你可以的時間測量機構并讓每個可調用的運行時用最小額外代碼,只需通過計時器結構調用即可。另外,在編譯時,您可以定時類型參數化(毫秒、納秒等)

多虧了洛基·阿斯塔里以及使用各種模板的建議。 這,這個是轉發函數調用的原因。

#include <iostream>#include <chrono>template<typename TimeT = std::chrono::milliseconds>struct measure{
    template<typename F, typename ...Args>
    static typename TimeT::rep execution(F&& func, Args&&... args)
    {
        auto start = std::chrono::steady_clock::now();
        std::forward<decltype(func)>(func)(std::forward<Args>(args)...);
        auto duration = std::chrono::duration_cast< TimeT> 
                            (std::chrono::steady_clock::now() - start);
        return duration.count();
    }};int main() {
    std::cout << measure<>::execution(functor(dummy)) << std::endl;}

演示

根據評論霍華德·辛南特在必要之前最好不要逃出計時系統。因此,上面的類可以讓用戶選擇調用。count通過提供額外的靜態方法(如C+14所示)

template<typename F, typename ...Args>static auto duration(F&& func, Args&&... args){
    auto start = std::chrono::steady_clock::now();
    std::forward<decltype(func)>(func)(std::forward<Args>(args)...);
    return std::chrono::duration_cast<TimeT>(std::chrono::steady_clock::now()-start);} // call .count() manually later when needed (eg IO)auto avg = (measure<>::duration(func) + measure<>::duration(func)) / 2.0;

對那些最有用的客戶來說

“想要在I/O之前對一系列持續時間進行后處理(例如平均值)”


完整代碼可以在這里找到..我試圖建立一個基準工具基于時間記錄這里.


如果C+17std::invoke中調用可調用的execution可以這樣做:

invoke(forward<decltype(func)>(func), forward<Args>(args)...);

提供作為指向成員函數的指針的可調用項。


查看完整回答
反對 回復 2019-06-27
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

//***C++11 Style:***std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();std::chrono::steady_clock::time_point end= std::chrono::steady_clock::now();std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() <<std::endl;std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::nanoseconds> (end - begin).count() <<std::endl;


查看完整回答
反對 回復 2019-06-27
  • 3 回答
  • 0 關注
  • 734 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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