在matlab中:
tic
do something ...
toc
我尝试使用此功能:
#define tic double tic_t = clock();
#define toc std::cout << (clock() - tic_t)/CLOCKS_PER_SEC \
<< " seconds" << std::endl;
现在我可以用C ++做到这一点:
tic
doSomething();
toc
问题是我无法在函数内多次调用它,因为tic_t将被定义多次。 我想做这样的事情:
tic
doSomething1();
toc
tic
doSomething2();
toc
答案 0 :(得分:14)
我将它实现为堆栈。然后,只要你在每toc()
之后拨打tic()
,你就可以递归,多次调用,做你想做的任何事情,并且不会中断。作为奖励,您不必使用宏:
#include <iostream>
#include <stack>
#include <ctime>
std::stack<clock_t> tictoc_stack;
void tic() {
tictoc_stack.push(clock());
}
void toc() {
std::cout << "Time elapsed: "
<< ((double)(clock() - tictoc_stack.top())) / CLOCKS_PER_SEC
<< std::endl;
tictoc_stack.pop();
}
int main(int argc, char *argv[]) {
tic();
doSomething();
toc();
return 0;
}
答案 1 :(得分:2)
将double tic_t;
作为全局,#define tic tic_t = clock();
或添加您在每种方法顶部使用的#define tictoc_init double tic_t
(并按上述方式更改tic
)
第二种方法更好,因为“doSomething()”可能包含会覆盖全局变量的抽搐和toc。