Simuler une horloge c++

Fermé
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014 - 24 août 2011 à 14:19
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014 - 24 août 2011 à 16:14
Bonjour,

Je veux coder une horloge qui s'incrémente avec une granularité de l'ordre du nanosecondes. Cet Horloge va servir d'horloge absolue pour une évolution d'autres objets (des objets paquets) dans mon projet et doit s'arrêter lorsque un certain traitement soit fini (une simulation).

J'ai du mal à traduire ça dans des lignes de codes: quelqu'un aurait-il une idée, un algorithme qui pourrait servir... Je vous en pris de m'aider car je suis débutante !

Merci d'avance de vos retours, et bon aprem à tous et à toutes :)


A voir également:

5 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié par KX le 24/08/2011 à 15:16
Nanosecondes : impossible !

Avec un processeur à 1 GHz tu peux faire une opération par nanoseconde.
Actuellement les processeurs sont de l'ordre de 3 GHz (soit 3 opérations par nanoseconde) donc à moins que ton programme n'ai que 3 instructions à exécuter par top d'horloge, tu ne pourras jamais atteindre l'ordre de grandeur du nanoseconde !
À titre de comparaison les horloges atomiques au Césium ont une fréquence de 9.2 GHz, même avec ça tu n'arriverais pas à faire ton programme précis à la nanoseconde près !

Donc en étant exigeant dans la limite du raisonnable, tu devras te contenter des microsecondes, commence tes recherches par gettimeofday
La confiance n'exclut pas le contrôle
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
24 août 2011 à 15:24
euh!... J'avoue que je n'ai pas trop compris ce que tu voulais dire, peut-être que que je me suis mal exprimée....

Dans mon projet, je m'intéresse pas à un traitement temps réel, j'aurais juste besoin d'un objet horloge qui me fait sortir des valeurs séparés d'un pas de 10 puissance -9, ou je vais stocker dans un vector de double...

J'ai tenté le code ci-après. Je sais que j'ai mis une boucle infinie qui bloque le programme, mais je ne sais pas quoi mettre dans la condition:

Clock.h

class Clock
{
private:

double m_timer;
std::vector<double> m_time;

public:
Clock();
~Clock();

std::vector<double> getm_time();

void startClock();


};



Clock.cpp

Clock::Clock(): m_timer(0)
{
m_time.push_back(m_timer);
}


Clock::~Clock()
{
}

vector<double> Clock::getm_time()
{
return m_time;
}

void Clock::startClock()
{

while (1)
{
m_timer=m_timer+1/1e9;
m_time.push_back(m_timer);
}
}



Merci de m'aider..
0
Bonjour

Je ne comprends pas très bien ta demande. Tu parles de simulation. Si c'est vraiment une simulation que tu cherches à faire, tu n'as aucun besoin d'une véritable horloge, un simple compteur suffit.
Si tu as vraiment besoin d'une horloge, je rejoins KX, n'y compte pas avec un PC même haut de gamme. Avec des circuits logiques programmables, ce n'est pas complètement exclu, mais ça demande des compétences
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
24 août 2011 à 15:46
Bonjour,

Effectivement, c'est d'un compteur que j'aurai besoin puisque je ne cherche pas vraiment le temps système ni sa performance en calcul..

Auriez vous une proposition pour arrêter mon compteur....

Merci :)
0

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

Posez votre question
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
24 août 2011 à 15:50
Il te suffirait juste de prendre trois unsigned int, qui compteraient le nombre de siècles, de secondes, et de nanosecondes. Ce sera bien plus précis que des double.
Avec ça tu devrais tenir plus de 400 milliards d'années à la nanoseconde près !
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
24 août 2011 à 15:54
Merci.....................................................................................................................................................oups, j'ai pas pu arriver aux 400 milliards d'années à la nanoseconde près :s
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
24 août 2011 à 15:55
NB: je ne rigolais pas quand j'ai posté ma question.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
24 août 2011 à 16:02
Je rigole pas non plus !

En fait il y a encore mieux, tu prends un unsigned long long int pour compter les nombres de secondes, ça te fait au maximum 2^64 secondes (soit 584.6 milliards d'années)
Et tu t'aides d'un unsigned long int (maximum = 4,3.10^9) pour compter les nanosecondes...

Et si je dis que c'est plus précis que les double c'est à cause des arrondis, qui sont trop importants avec les double pour ce que tu veux faire !
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
24 août 2011 à 16:14
OK, merci, c sur que j'aurai pas mal de valeurs à générer ..

Merci bcp!
0