2017-06-04 93 views
0

我想在秒鐘內使用chrono庫找到2個時鐘之間的差異。我嘗試了各種方式,以下是其中之一。他們都能正常工作,直到差距達到59秒,但在此之後超時。我真的需要即使超過59秒的差異的實際價值C++ chrono秒鐘內2個時鐘之間的差異

#include <iostream>  
#include <chrono>  
#include <thread>       

int main() 
{ 
    using std::chrono::system_clock; 
    using std::chrono::milliseconds; 
    using std::chrono::seconds; 
    using std::chrono::duration_cast; 
    const auto duration = milliseconds(1000); 
    const auto start = system_clock::now(); 

    for(int i=0; i<65; i++) 
    { 
     std::this_thread::sleep_for(duration); 
    const auto stop = system_clock::now(); 

    const auto difference = std::chrono::duration_cast<seconds>(stop - start).count(); 

    std::cout << "Difference is =>" << difference << std::endl; 

    } 
} 

以上輸出差異,直到59和超過之後。這裏發生了什麼錯誤?

回答

1

此代碼工作正常:如預期,我可以編譯和成功地執行它與Xcode的MacOS和與MSVC2017 WINGDOWS,讓計時,直到65。

以秒爲單位的持續時間並不侷限於通過std::chrono的60。 std::chrono::seconds只是一個度量單位。你甚至可以找到的,可以算作這種方式的最大秒數。當然,也有依賴於系統的限制,但這些是遠遠高於60:

std::cout << "Max is " 
    << std::chrono::duration_cast<seconds>(start-start).max().count() << std::endl; 

我也得到預期的結果ideoneonline demo),其中60和65,但ideone之間的時序有一個執行時間限制在10秒左右,以便首次超時。因此,我不得不從開始時從其減去55秒調整你的代碼:

const auto start = system_clock::now()-milliseconds(55000); 

沒有理由爲您的代碼失敗,除了一個編譯器/庫依賴的錯誤。

+1

還在Linux上用GCC測試過,效果很好。 – ShadowMitia

+0

@ShadowMitia感謝您的反饋!而時間,開始我的Windows機器,我可以證實,它的作品以及與MSVC2017的窗戶。 – Christophe

+0

是的,它工作得很好。謝謝。我在http://cpp.sh中嘗試過它在59秒後停止 – User