CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

un compteur de millisecondes?

caelacanthe
caelacanthe
Niveau 10
19 novembre 2007 à 15:40:07

:salut:

dans le cadre d´un de mes programmes inutiles (en c-c++), j´aurais besoin d´un moyen de décompter avec précision des millisecondes (ou des centisecondes a la limite) pour faire un chronomètre :-)

je connais la fonction time, qui décompte des secondes, mais voilà quoi, c´est pas assez précis :-(

je compte sur vous pour m´aider :merci:

saleGauss
saleGauss
Niveau 9
19 novembre 2007 à 15:49:33

Tu as timeGetTime, précise au centième de seconde je crois, et sinon les QPF : QueryPerformanceFrequency.
Ils fonctionnent ainsi :

init du compteur de temps :
LONGLONG frq = NULL;
bool bRes = false;

bRes = QueryPerformanceFrequency((LARGE_INTEGER *) &frq);
if(bRes)
{
// Lecture du temps avec le compteur de performances
QueryPerformanceCounter((LARGE_INTEGER *) &t0);
ft = 1.0f/frq;
return(TRUE);
}
else
{
// Pb : afficher message d´erreur
}

voir le temps écoulé :

QueryPerformanceCounter((LARGE_INTEGER *)& t);
dt = (t-t0)*ft; // On multiplie par 0.001f pour passer de millisecondes à des secondes
t0 = t; // Le nouvel instant devient maintenant l´ancien, pour le futur calcul...

et le lib qui implémente ca est MMSYSTEM.H je crois bien.

Voilou, tu as tout je pense !
Bonne journée !

kufa
kufa
Niveau 9
19 novembre 2007 à 18:52:52

Pas besoin de MMSYSTEM.h, windows.h fera l´affaire.
Note que il faut utiliser setthreadaffinity pour etre sur que cela fonctionne sur toutes les configs.

caelacanthe
caelacanthe
Niveau 10
20 novembre 2007 à 01:12:49

justement, je suis en pleine découverte de la librairie windows.h :merci:

Geek-Puissant
Geek-Puissant
Niveau 8
20 novembre 2007 à 08:21:14

NON! Pourquoi ne pas utiliser les fonctions standards?

  1. include <iostream>
  2. include <cstdio>
  3. include <ctime>

int main()
{
std::clock_t start;
double diff;

start = std::clock();
for ( int i = 0; i < 1000000; i++ )
printf ( "iamthwee" );
diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;

std::cout<<"printf: "<< diff <<´\n´;
}

(chopée sur le net en 20 secondes)

kufa
kufa
Niveau 9
20 novembre 2007 à 09:01:31

Les fonctions standards n´ont pas une resolution tres grande, c´est parfais lorsqu´on veut faire des utilitaires se basant sur des dates, mais cela ne convient pas du tout aux real-time applications. Pour info, CLOCKS_PER_SEC vaut 1000 dans vs8...
Un lien interessant:
http://msdn2.microsoft.coom/en-us/library/bb173458.aspx

godrik
godrik
Niveau 30
20 novembre 2007 à 12:57:43

en plus avec le scaling des frequence des processeurs, et les horloges désynchronisés de certaines architectures multicoeur, je n´ai pas bien confiance dans ces techniques.

kufa
kufa
Niveau 9
20 novembre 2007 à 14:34:51

de quelles techniques parles-tu ? :)
les queryperformanceXXX fonctionnent tres bien si tu set le thread affinity tjs au meme core lors de leurs appels, et gerent les variations de frequence. C´est la seule facon "correcte" d´implementer un timing de nos jours sous windows.

godrik
godrik
Niveau 30
20 novembre 2007 à 15:07:29

je parlais de l´utilisation de clock. Il y a des architectres qui scale l´horloge avec la fréquence du CPU.

Sinon, a ce grain la (la millisecondes), on peut s´en sortir avec l´horloge classique qui est précise a la micro seconde (sous linux gettimeofday).

Si on veut etre plus précis, il faut descendre sur les compteurs matériel et la, ca devient beaucoup, beaucoup plus compliqué. Entre la migration de thread, le scaling des frequences, les horloges asynchrones des core1 (qui sont synchrones dans les core2 d´ailleurs)...

caelacanthe
caelacanthe
Niveau 10
20 novembre 2007 à 15:12:59

j´ai juste besoin d´une précision en millisecondes :peur:

en tout cas, :merci: les gars

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment