Date et heure

Signaler
Messages postés
11
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
7 mai 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour,

Je souhaite réaliser un programme qui grâce à un un premier réglage de l'heure et de la date est capable de rester à l'heure de façon autonome, c'est a dire que je ne désire pas utiliser l'heure et la date système mais l'incrémenter de façon régulière dans le programme.
Si possible j'aimerai que cela ne soit pas bloquant ou fait avec une boucle for en calculant avec la vitesse du processeur , parce qu'après j'aimerais le faire tourner dans un Thread...

D'avance merci pour vos idée ou vos exemple de code.

5 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

Quelque soit la méthode, ça m'étonnerait que ça reste précis sans synchronisation régulière avec l'horloge !

Jean-François
Messages postés
11
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
7 mai 2008

Bonjour,

A la limte, si c'est pas extrèmement précis c'est pas ce qu'il y a de plus grave. Parce qu'a priori je pourrais me resynchroniser assez régulièrement.
Cependant j'aimerais au moins que si ça reste quelques heure en autonome ça ne se dérègle que de quelques secondes au maximum.

merci
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

Je viens de faire tourner ce petit code 1000 secondes (tout en continuant de travailler sur le même PC), sans décalage apparent, mais voir ce que cela donnera sur plusieurs heures !

#include <stdio.h>
#include <time.h>
#include <windows.h>



int main(void)
{
   // --- Horloge au début
   time_t tH0 = time(NULL);
   printf("H0 = %ld\n",tH0);




   // --- Boucle simulant l'horloge
   int iCpt = 0;
   for (int i=0 ; i<1000 ; ++i)
   {
      Sleep(1000); // 1000 ms
      ++iCpt;
   }




   // --- Horloge à la fin / compteur

   time_t tH1 = time(NULL);   printf("H1 %ld h0 + %d secondes\n",tH1,(int)(tH1 - tH0));
   printf("Compteur = %d\n",iCpt);
   return 0;
}


Ce qui donne :

H0 = 1209544153H1 1209545153 h0 + 1000 secondes
Compteur = 1000

Mais j'imagine bien que la fonction Sleep() doit utiliser l'horloge du PC ! Si c'est le cas on continue d'en dépendre indirectement.

Jean-François
Messages postés
11
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
7 mai 2008

Salut,

En fait j'avais pensé à un programme de ce type mais je connais mal le fonctionnement de la fonction sleep et j'ai peur qu'en fait, puisque que j'ai un programme avec des thread, le timing soit completement faussé.
Donc je vais tout de même esseyer de l'implémenter (malheureusement c'est pas pour tout de suite car je compte embarquer le code sur un carte de devellopement), puis on verra ce que cela donne.

Si vous avez d'autre idée je suis toujours prenneur
Et merci tout de même pour vos réponses
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Sleep n'assure seulement que le thread restera endormie pour X ms. Rien ne garanti que l'exécution sera repris exactement après c'est X ms. Si le CPU traite un autre thread ou un thread à priorité élevé, ton thread attendra son tour comme les autres.

Aucune précision à attendre si il n'y a pas une synchronisation quelque part.

C++ (@++)<!--