idamnjanovic@60: function tid = timerinit(par1,par2) idamnjanovic@60: %TIMERINIT Initialize a new timer. idamnjanovic@60: % TID = TIMERINIT() initializes a new timer for counting elapsed time, idamnjanovic@60: % and returns its id. idamnjanovic@60: % idamnjanovic@60: % TID = TIMERINIT('TIMERNAME') sets the timer name to the specified idamnjanovic@60: % string for display purposes. idamnjanovic@60: % idamnjanovic@60: % TID = TIMERINIT(ITERNUM) initializes a new ETA timer for a process with idamnjanovic@60: % ITERNUM iterations. An ETA timer can be used for both counting elapsed idamnjanovic@60: % time and estimating remaining time. idamnjanovic@60: % idamnjanovic@60: % TID = TIMERINIT('TIMERNAME',ITERNUM) sets the ETA timer name to the idamnjanovic@60: % specified string for display purposes. idamnjanovic@60: % idamnjanovic@60: % Example: idamnjanovic@60: % idamnjanovic@60: % tid = timerinit(100); idamnjanovic@60: % for i = 1:100 idamnjanovic@60: % pause(0.07); idamnjanovic@60: % timereta(tid,i,1); idamnjanovic@60: % end idamnjanovic@60: % timereta(tid,i); idamnjanovic@60: % idamnjanovic@60: % See also TIMERETA, TIMERCLEAR. idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: % Ron Rubinstein idamnjanovic@60: % Computer Science Department idamnjanovic@60: % Technion, Haifa 32000 Israel idamnjanovic@60: % ronrubin@cs idamnjanovic@60: % idamnjanovic@60: % June 2008 idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: global utiltbx_timer_start_times % start times idamnjanovic@60: global utiltbx_time_lastdisp % last display times idamnjanovic@60: global utiltbx_timer_iternums % iteration numbers idamnjanovic@60: global utiltbx_timer_lastiter % last queried iteration numbers idamnjanovic@60: global utiltbx_timer_name % timer names idamnjanovic@60: global utiltbx_timer_callfun % timer calling functions idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: % parse function arguments % idamnjanovic@60: idamnjanovic@60: if (nargin==0) idamnjanovic@60: idamnjanovic@60: iternum = -1; idamnjanovic@60: timername = ''; idamnjanovic@60: idamnjanovic@60: elseif (nargin==1) idamnjanovic@60: idamnjanovic@60: if (ischar(par1)) idamnjanovic@60: iternum = -1; idamnjanovic@60: timername = par1; idamnjanovic@60: idamnjanovic@60: elseif (isnumeric(par1) && numel(par1)==1 && par1>0) idamnjanovic@60: iternum = par1; idamnjanovic@60: timername = ''; idamnjanovic@60: idamnjanovic@60: else idamnjanovic@60: error('Invalid number of iterations'); idamnjanovic@60: end idamnjanovic@60: idamnjanovic@60: elseif (nargin==2) idamnjanovic@60: idamnjanovic@60: if (ischar(par1) && isnumeric(par2)) idamnjanovic@60: if (numel(par2)==1 && par2>0) idamnjanovic@60: timername = par1; idamnjanovic@60: iternum = par2; idamnjanovic@60: else idamnjanovic@60: error('Invalid number of iterations'); idamnjanovic@60: end idamnjanovic@60: else idamnjanovic@60: error('Invalid function syntax'); idamnjanovic@60: end idamnjanovic@60: idamnjanovic@60: else idamnjanovic@60: error('Too many function parameters'); idamnjanovic@60: end idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: % register the timer % idamnjanovic@60: idamnjanovic@60: if (isempty(utiltbx_timer_start_times)) idamnjanovic@60: utiltbx_timer_start_times = clock; idamnjanovic@60: utiltbx_time_lastdisp = utiltbx_timer_start_times; idamnjanovic@60: utiltbx_timer_iternums = double(iternum); idamnjanovic@60: utiltbx_timer_lastiter = 0; idamnjanovic@60: utiltbx_timer_name = { timername }; idamnjanovic@60: utiltbx_timer_callfun = {}; idamnjanovic@60: tid = 1; idamnjanovic@60: else idamnjanovic@60: utiltbx_timer_start_times(end+1,:) = clock; idamnjanovic@60: utiltbx_time_lastdisp(end+1,:) = utiltbx_timer_start_times(end,:); idamnjanovic@60: utiltbx_timer_iternums(end+1) = double(iternum); idamnjanovic@60: utiltbx_timer_lastiter(end+1) = 0; idamnjanovic@60: utiltbx_timer_name{end+1} = timername; idamnjanovic@60: tid = size(utiltbx_timer_start_times,1); idamnjanovic@60: end idamnjanovic@60: idamnjanovic@60: idamnjanovic@60: % detect timer calling function % idamnjanovic@60: idamnjanovic@60: st = dbstack; idamnjanovic@60: if (length(dbstack) >= 2) idamnjanovic@60: utiltbx_timer_callfun{end+1} = st(2).name; idamnjanovic@60: else idamnjanovic@60: utiltbx_timer_callfun{end+1} = ''; idamnjanovic@60: end