Comment faire un Timer ?

Guidelor Messages postés 236 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 18 août 2006 - 8 mars 2004 à 20:42
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 - 13 mars 2004 à 12:53
Bonjour à tous

J'aimerais faire un prog avec Dev-C++ ,qui regarderait toutes les secondes dans le registre si l'ordi est connecté
pour cela je pense que je dois utiliser un timer, mais comment le créer et l'utiliser ?

D'avance merci !

:: Guidelor ::

7 réponses

glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
8 mars 2004 à 21:01
Bonjour,
je ne connais pas du tout DevC++ (ou tres peu), mais en general, on utilise SetTimer il me semble.

Deux solutions pour faire marcher cette fonction je crois :

VOID CALLBACK TimerProc1(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
....
SetTimer(hWnd,0, 1000, (TIMERPROC)TimerProc1); // dans ce cas la, ca appelle la procedure TimerProc1 toutes les secondes.
....

ou bien :

/b
...
case WM_CREATE:
{
SetTimer(hWnd, WM_TIMER, 40, NULL);
break;
}
case WM_TIMER:
{
...
appelé toutes les 40ms
...
break;
}
/b

Voila, j'espere que ça pourra t'aider.
++ Glipper :)
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
8 mars 2004 à 21:16
Ou encore windows.h et timeGetTime() qui te renvoie un doucle avec le temps ecoulé depuis le lancement de lordi tu en fait un timer ^^
0
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
8 mars 2004 à 21:27
Exact....
Voila un exemple simple d'ailleur (j'en avais un sous la main):

Tu place dans la boucle de message :

TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
ReFresh();

Puis dans la fonction Refresh() :

static unsigned int TimeStart = timeGetTime(),TimeStop;
TimeStop = timeGetTime();

if (TimeStop - TimeStart > 20) // timer de 20 ms ici
{
...
instruction
...
TimeStart = TimeStop;
}

Voila voila ;)
Glipper
0
Guidelor Messages postés 236 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 18 août 2006
10 mars 2004 à 23:22
Merci pour vos réponses !
Cependant.. je suis débutant dans ce langage donc j'ai un peu de mal...
Deja c koi les includes qu'il faut mettre ?
ensuite serait-il possible que tu me donnes un exemple avec la premiere solution qui m'a l'air bien sympatoche ?
Par exemple, pourrais-tu taper le code complet qui afficherait "\ncoucou\n" toutes les secondes ?
je ne pense pas ke ce soit trop compliké et ca m'eclairecirait grandement l'affaire...

D'avance merci beaucoup pour ta reponse qui va m'etre d'une grande grande utilité !

:: Guidelor ::
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
11 mars 2004 à 17:06
Bon voila un exemple de code ... je l'ai fait avec DevC++ donc ca devrait marcher sans aucun probleme :

#include <windows.h>

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof(WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use light-gray as the background of the window */
    wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);

    /* Register the window class, if fail quit the program */
    if(!RegisterClassEx(&wincl)) return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx(
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",         /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow(hwnd, nFunsterStil);
    /* Run the message loop. It will run until GetMessage( ) returns 0 */
    while(GetMessage(&messages, NULL, 0, 0))
    {
           /* Translate virtual-key messages into character messages */
           TranslateMessage(&messages);
           /* Send message to WindowProcedure */
           DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage( ) gave */
    return messages.wParam;
}

/* This function is called by the Windows function DispatchMessage( ) */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
           case WM_CREATE:
           SetTimer(hwnd, WM_TIMER, 5000, NULL);
           break;
           case WM_TIMER:
           MessageBox(hwnd, "coucou", "titre de la dialogbox", NULL);
           break;
           case WM_DESTROY:
           PostQuitMessage(0);        /* send a WM_QUIT to the message queue */
           break;
           default:                   /* for messages that we don't deal with */
           return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}


J'ai juste rajouté ceci dans le code de base proposé par DevC++ :

case WM_CREATE:
SetTimer(hwnd, WM_TIMER, 5000, NULL);
break;
case WM_TIMER:
MessageBox(hwnd, "coucou", "titre de la dialogbox", NULL);
break;

Voila. Sinon, je pense qu'il doit y avoir une multitude de sources sur cppfrance.com qui contiennent des exemples de timer...

++ Glipper
0
Guidelor Messages postés 236 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 18 août 2006
11 mars 2004 à 19:00
Merci Glipper pour ta reponse
cependant ce que je demandais, ct juste un petit prog en mode console que je voulais ! vu que la j'y comprends rien du tout ! et en plus bizarement ca ne marche pa...
Pourrais-tu me faire ce petit prog tant attendu, si cela est possible ?
D'avance merci beaucoup !

:: Guidelor ::
0
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
13 mars 2004 à 12:53
Excuse moi, mon code ne me paraissait pas aussi long, et avec les retour à la ligne, il est devenu incompréhensible en +.
Je ne crois que les Timer soient possible en mode console. C'est à vérifier, mais il me semble qu'il est nécessaire qu'il y ait du multitache pour que l'on puisse utiliser les timer.
Par contre, tu peux peut-être utiliser une boucle while pour faire ton timer, non ? Et tu te sers de l'heure pour que ton instruction s'execute qu"à interval regulier.

Ce qui pourrait se faire avec ce code la :

unsigned int TimeStart = timeGetTime(),TimeStop;

while (1)
{
TimeStop = timeGetTime();

if (TimeStop - TimeStart > 20) // timer de 20 ms ici
{
...
instruction
...
TimeStart = TimeStop;
}
}

Voila, je ne sais pas quoi te proposer d'autre... je ne connais pas d'autre solution.
++ Glipper
0
Rejoignez-nous