Intro

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.

Pages: 1 2 3
Skip to toolbar