2012-11-21 61 views
3

在MATLAB:如何在C++中使用matlab tic toc?

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 

回答

14

我將它作爲一個堆棧來實現。然後,您可以多次調用,多次調用,做任何您想要的操作,並且不會中斷,只要您在每tic()之後撥打toc()即可。作爲獎勵,你不必訴諸宏使用:

#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; 
} 
2

要麼把double tic_t;作爲一個全球性的,#define tic tic_t = clock();或補充一點,你在每個方法的頂部使用#define tictoc_init double tic_t(如上述改變tic

的第二種方式更好,因爲「doSomething()」可能包含會覆蓋全局變量的tics和tocs。