2014-01-24 72 views
0

我有一些代碼,我用秒錶進行測試,以記錄執行時間。我不想總是運行它,所以我認爲處理定時器的最有效方法是使用預處理器宏。對於下面的例子,如果定義了ENABLE_ENGR_PROFILING,我在秒錶上調用start()函數,做一些工作,然後在stopwatch上調用accumulate(),從start()開始測量時間增量並將其添加到時間計數器。然後在節目結束時,我可以傾倒時間,看看時間在哪裏。這很好,但它增加了很多代碼。當我在使用算法時,我不想被計時器代碼分心。在下面的7行中,當我正在執行程序時,我真的只想看到1行,someTimeConsumingCode()。有沒有辦法在Visual Studio 2010中隱藏這些宏?可能隱藏Visual Studio 2010中的#define /宏?

#if defined(ENABLE_ENGR_PROFILING) 
stopwatch.start(); 
#endif 
someTimeConsumingCode(); 
#if defined(ENABLE_ENGR_PROFILING) 
stopwatch.accumulate(); 
#endif 
+0

你是什麼意思「在算法上工作「? –

+0

通過算法,我的意思是除了定時器之外的所有東西......在處理算法/主程序代碼時,我想忽略定時器(看不到它們)。 –

+0

您能移動到2012年還是2013年? Lambda使這種事比宏更好... –

回答

0

我不認爲你可以完全隱藏代碼,但你可以定義一些宏來清理雜亂:

#if defined(ENABLE_ENGR_PROFILING) 
#define DECLARE_STOPWATCH() TStopWatch stopwatch; // <- whatever your class type actually is 
#define START_STOPWATCH() stopwatch.start() 
#define ACCUMULATE_STOPWATCH() stopwatch.accumulate() 
#else 
#define DECLARE_STOPWATCH() 
#define START_STOPWATCH() 
#define ACCUMULATE_STOPWATCH() 
#endif 

DECLARE_STOPWATCH(); 
... 
START_STOPWATCH(); 
someTimeConsumingCode(); 
ACCUMULATE_STOPWATCH(); 
相關問題