Gestion du Temps

Le timer

Le timer est un processus qui une fois lancé, tourne en parallèle avec le programme et déclenche à intervalles réguliers l'exécution d'une fonction définie.

Les étapes et les fonctions pour utiliser le timer sont:
Voici quelques propriétés de l'objet timer. Vous aurez plus de détail ici
ExecutionMode Mode d'exécution. Les valeurs possibles sont: {singleShot} , fixedDelay , fixedRate, fixedSpacing
Avec singleshot, le timer compte une seule période et s'arrêtte. La fonction associée est éxécutée une seule fois.
Avec les 3 autres paramètres, on obtient à peu près la même chose. La fonction associée est déclenchée périodiquement selon la période choisie.
Period Période du timer en secondes. Par défaut = 1.0 s
Running Permet de savoir si le timer est démarré ou arrêté. Elle retourne les valeurs 'on', ou 'off'
etat = get(id, 'Running')
StartDelay Période entre le moment du démarrage du timer avec la fonction start() et le moment où il démarre effectivement. Par défaut , sa valeur est 0
StartFcn Fonction qui sera appelée  au moment du démarrage du timer
StopFcn Fonction qui sera appelée  quand le timer est stoppé ou quand il a terminé le nombre de périodes précisé par la propriété TasksToExecute
TasksToExecute Nombre de périodes à achever avant de s’arrêter automatiquement
TasksExecuted Permet de savoir combien de périodes se sont écoulées depuis le démarrage du timer.
n = get(id, 'TasksExecuted')
TimerFcn Définit le callback du timer.: Nom de la fonction qui sera exécutée chaque fois que le timer a terminé une période

Voici un petit exemple pour illustrer tout ça
function timer_anim()
    close all;
    fh = figure('menu','none','Units','Normal', 'pos', [0.25 0.25 0.5 0.5]);
    ax = axes('Units','Normal', 'pos', [0.25 0.05 0.73 0.9],'NextPlot','add');
    set(ax,'xtick',[], 'ytick', [])
    set(fh, 'defaultUicontrolUnits','normalized');
    ext = uicontrol(fh, 'style','pushbutton', 'string', 'EXIT',...
        'pos',[0.04 0.05 0.15 0.1], 'callback',@extcall);
    strtstp = uicontrol(fh, 'style','pushbutton', 'string', 'START / STOP',...
            'pos',[0.04 0.2 0.15 0.1], 'callback',@strtstpcb);
    vu = uicontrol(fh, 'style','Text', 'pos',[0.04 0.35 0.15 0.15], 'foreg', 'b');
    tmr = timerfindall; % chercher s'il y'a des timer qui trainent
    delete(tmr);
    tmr = timer('ExecutionMode', 'fixedRate', 'Period', 0.1,...
      'TasksToExecute',100, 'StartFcn', @strt, 'StopFcn', @stp, 'TimerFcn',@tmrcall);
    k = 4;
    p = pi/50;
    t = 0 : p : 2*pi;
    x = sin(t);
    y = sin(k*t);
    plot(x,y,':');
    m = plot(0, 0, 'o', 'Markersize',10, 'MarkerFaceColor','g','EraseMode','xor');
    axis([-1.2 1.2 -1.2 1.2]);
    t = 0;
    x = 0;
    y = 0;
    start(tmr);
 
    function strt(obj, event)
           tic;
           set(vu, 'string', {'' 'C''est parti ' 'pour un tour'}) 
    end

    function stp(obj, event)
           tt = num2str(toc);
           ttt = ['en ' tt ' s'];
           set(vu, 'string', {'' 'C''est fait' ttt});
           [yy, ff]=wavread('c:\windows\media\notify');
           sound(yy,ff,16);
    end

    function tmrcall(obj, event)
        m = plot(x, y, 'o', 'Markersize',10, 'MarkerFaceColor','g','EraseMode','xor');
        t = t + p;
        x = sin(t);
        y = sin(k*t);
        m = plot(ax, x, y, 'o', 'Markersize',10, 'MarkerFaceColor','g','EraseMode','xor');
    end

    function strtstpcb(obj, event)
        s = get(tmr,'running');
        if strcmp(s, 'off')
            start(tmr);
        else
            stop(tmr);
        end
    end

    function extcall(obj,event)
        s = get(tmr,'running');
        if strcmp(s, 'on')
            stop(tmr);
        end
        delete(tmr);
        clear tmr;
        delete(fh);
    end
      
end


Tic, Toc

Permette de déterminer le le temps d'exécution d'une ou d'un ensemble d'instructions.

tic;
. . .
. . .
. . .
. . .
t = toc

L'exemple ci-dessous montre que (sur ma machine), Matlab met 0.38s pour inverser une matrice 1000x1000 et 0.057s pour calculer le logarithme de toutes ses valeurs

>> a = rand(1000,1000);
>> tic; b=inv(a); toc

     Elapsed time is 0.383913 seconds.

>> tic; b = log(a); t=toc
    t =   0.0568


clock

la fonction clock retourne la date et l'heure sous forme d'un vecteur à six éléments,
[année moi jour heure minute secondes]
[year month day hour minute seconds]

>> format short g
>> clock

       ans =       2013            7           28           16           34       59.192

>> d = clock;
>> fprintf('On est le %d/%d/%d %dh:%dmn:%5.2fs\n', d(3),d(2),d(1),d(4),d(5),d(6))

     On est le 28/7/2013 16h:39mn:35.14s

On peut aussi essayer comme ça:

>> d = clock,,
      d  =   2013            7           28           16           52       38.084
>> d(1:3) = fliplr(d(1:3))
      d =      28            7         2013           16           52       38.084
>> fprintf('On est le %d/%d/%d  %dh:%dmn:%5.2fs\n', d)
      On est le 28/7/2013  16h:52mn:38.08s


pause

Permet d'interrompre momentanément l'exécution d'un programme. Plusieurs syntaxes sont possibles:
pause
pause(n)
pause on
pause off
pause query
state = pause('query')
oldstate = pause(newstate)


pause
Suspend l'exécution d'un programme m-file jusqu'à ce qu'on touche le clavier

pause(n)
Suspend l'exécution d'un programme m-file pendant n secondes. n est un nombre réel positif

pause on
Valide la possibilité d'interrompre les programme à l'aide de l'instruction pause et pause(n)

pause off
désactive la possibilité d'interrompre les programme à l'aide de l'instruction pause et pause(n)

pause query
Affiche l'état (on ou off) de validation de pause

etat = pause('query')
Affecte l'état de validation de pause à la variable etat

oldstate = pause(newstate)
L'état actuel de validation de pause est affecté à la variable oldstate. Le nouvel état de validation prend la valeur de newstate