Intro
Contents
Il namespace CLKS contiene tre classi utilizzate per la gestione dei tempi di esecuzione del codice:
- Clock : utilizzata per valutare il trascorrere del tempo con la risoluzione massima di un secondo; è usata per gestire processi lenti, ad esempio gli allarmi legati ad eventi che devono avvenire in x minuti.
- Clock_hight_resol: è usata per gestire timers con risoluzione dei tempi nell’ordine dei nanosecondi
- PerformanceCounter : è usata per semplificare la gestione dei timers, usa internamente i clock hardware dei processori, usando il numero di tick di esecuzione e la frequenza del clock.
Clock
/** \brief crea un timer e lo lancia #define $_clock_start Clock __ck; __ck.Start(); /** \brief visualizza la finestra con il tempo trascorso */ #define $_clock_end(msg) __ck.DisplayElapsedTime(msg); /** rimanda il numero di millisecondi trascorsi */ #define $_clock_elapsed_msec(clk,msec) { CTimeSpan t=clk.ElapsedTime(); msec=(t.GetHours()*3600+ t.GetMinutes()*60+t.GetSeconds())*1000; } class AFX_EXT_CLASS Clock { public: bool TimeOut(); CTimeSpan ElapsedTime(); void SetTimeout(int h, int min, int secondi); void Start(); Clock(); virtual ~Clock(); void DisplayElapsedTime(TCHAR *msg = 0); private: int timeout; // timeout in secondi; CTime startTime; // inizio del conteggio };
void SetTimeout(int h, int min, int secondi) : Definisce il timeout per il successivo test (vedi TimeOut()).
void Start() : lancia il timer in esecuzione.
CTimeSpan ElapsedTime() : rimanda l’intervallo di tempo trascorso da Start()
bool TimeOut() : rimanda true se è trascorso l’intervallo di tempo definito usando SetTimeOut(..)
DisplayElapsedTime(TCHAR *msg) : visualizza una finestra modale contenente il messaggio msg associato al tempo trascorso (in h, m, sec);
Sono fornite inoltre tre macro, parte di CLB_language, per semplificare la scrittura del codice: $_clock_start, $_clock_end(msg) , $_clock_elapsed_msec(clk,msec)
L’esempio di codice che segue mostra come utilizzare queste macro:
bool calc_calib() { if (!calib) { __warning(__translate("You must load the calibration image reference before calculation..")) } else { $_clock_start Mat *view = Cv_functions::Image_2_mat(calib); // alloca la matrice if (view) { $_clock_start int chessBoardFlags = CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE | CALIB_CB_FAST_CHECK; // .. se possibile usa openCL UMat uview = view->getUMat(cv::ACCESS_READ); bool found = findChessboardCorners(uview, vcs.boardSize, gpt, chessBoardFlags); // bool found = findChessboardCorners(*view, vcs.boardSize, gpt, chessBoardFlags); $_clock_end(L"ricerca dei punti della griglia") __delete(view); if (found) return draw_points(); } } return false; }
il codice compreso fra $_clock_start e $_clock_end(L”ricerca dei punti della griglia”) è quello testato dal timer; $_clock_end quindi visualizza il tempo trascorso per l’esecuzione.