Utilisation du settimer

Signaler
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007
-
Messages postés
20
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2008
-
Bonjour,

je souhaiterai utiliser le SetTimer() mais j'ai des problèmes avec:

J'utilise bien une fonction callback dans laquelle je vais écrire dans un fichier.

le problème C que mon Timer ne se lance mm pas .

Voici le code:

#include <windows.h>
#include <winuser.h>
#include "stdio.h"

int test;

void CALLBACK timer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )
{
FILE *fichier;
int erreur;

   test=test+1;
   fichier=fopen("c:\\toto.txt","w");
    erreur=fputs("RING\n",fichier);
    fclose(fichier);
}

void main(int argc, char* argv[])
{
    printf("alarm application starting\n");
/* Set up a 5 second timer which calls alrm_bell */
   SetTimer(0, 0, 5000,(TIMERPROC) timer);
}

12 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Il se lance mais ton prog finit ilico derrière.
Faire du prog GUI pour cela.

ciao...
BruNews, MVP VC++
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007

C'est à dire ???

J'ai mis une boucle infini derrière mon settimer et sa ne fait rien non plus ?
Il  ne rentre mm pas une fois dans ma fonction timer

A l'avance merci
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Si tu es dans une boucle infinie, tu ne pourras traiter rien d'autre.

ciao...
BruNews, MVP VC++
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007

pourquoi il ne rentre mm pas une fois dans ma boucle ???

il faudrai que je mettre quoi alors comme code derrière mon SetTimer ???
ou aurais tu un exemple de code avec un SetTimer en C

A l'avance merci .
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
En C comme en C++ on fait du GUI, la console n'est plus réservée qu'à des usages très particuliers.

ciao...
BruNews, MVP VC++
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007

Mon but est de le faire fonctionner dans un code en C sans fenetre.

En faite je fais un timer pour qu'il aille vérifier tout les x sec dans la base de registre et comparer une date;Si celle ci est inférieur a la date souhaité il l'a change;Ma fonction de comparaison fonctionne très bien , le problème est que je souhaite qu'elle soit exécuter tout le x secondes C pour cela que je fais un settimer.

A l'avance merci
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Utilise Sleep().

ciao...
BruNews, MVP VC++
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007

Je ne peux pas utiliser de sleep() car j'ai d'autre action qui se deroule à la suite de ce timer
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
//---------------------------------------------------------
// Ce programme sans interface utilisateur
// emet un BIP toutes les 5 secondes ...
//---------------------------------------------------------
#include <windows.h>



// Traitement a intervalles reguliers ---------------------
void CALLBACK TimerProc(HWND a, UINT b, UINT c, DWORD d)
{
  MessageBeep(0);
}



//---------------------------------------------------------
int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
  MSG  msg;
  UINT uTimer;
 
  // Premier traitement...
  MessageBeep(0);
 
  // ... puis, traitement a intervalles reguliers       
  uTimer = SetTimer(0, 1, 5000, TimerProc);
  
  while(GetMessage(&msg, NULL, 0, 0))
    DispatchMessage(&msg);



  KillTimer(0, uTimer);     
  return 0;
}
Messages postés
42
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
30 mars 2007

Merci Magma, mais je souhaiterai à la suite de ce timer faire plein d'instructtion en mm tps que le timer soit lancer.

Le problème qu'il se pose, c'est là avec ta boucle While ( ) , il n'execute pas la suite si on lui mets une instruction dérrière.

Aurais-tu une solution ?

A l'avance merci
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
Mets tes instructions AVANT la boucle while !
Messages postés
20
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
4 octobre 2008

Pourquoi tu n'utilise pas les threads?
Un thread avec une boucle et un Sleep(5000);
et un thread avec le reste du programme.