容易測量過的時間我試著用時間()來測量我節目的各個方面。我不明白的是,為什么前后的值是一樣的?我知道這不是最好的方式來分析我的程序,我只是想看看需要多長時間。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

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
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之前對一系列持續時間進行后處理(例如平均值)”
std::invoke
execution
invoke(forward<decltype(func)>(func), forward<Args>(args)...);

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;
- 3 回答
- 0 關注
- 734 瀏覽
添加回答
舉報
0/150
提交
取消