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