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

[C++]Fixer nb passage/seconde dans fct

Lutrinae
Lutrinae
Niveau 10
29 septembre 2011 à 20:51:49

Bonjours!

Désolé pour le titre, je n'avais pas asser de place :-p

Voila ma question : en C++, comment fait-on fixer le nombre d'appel maximum par seconde d'une fonction?
Je me souvient l'avoir déjà fait en Python, où l'on fixait une fréquence, et dans la fonction, on mettait une commande avec cette fréquence comme argument.
C'était pratique pour les animations :(

Mais je n'ai aucune idée de comment le faire en C++, et même si c'est seulement possible :noel:

Si quelqu'un sait comment faire....

Merci d'avance :-)

caelacanthe
caelacanthe
Niveau 10
29 septembre 2011 à 20:55:09

tout est possible en c++! suffit de le coder. :hap:

si tu as un moyen de connaitre le temps écoulé depuis le lancement du programme, si possible avec des valeurs précises genre millisecondes, tu peux incrémenter régulièrement un petit compteur qui, quand il dépasse une certaine valeur, sera remis à zéro et accompagné d'un appel de la fonction en question. :oui:

Lutrinae
Lutrinae
Niveau 10
29 septembre 2011 à 21:09:37

Ouais, j'avais penser à un truc comme ça, mais j'avoue que j'avais la flemme de mettre les mains dans la cambouis :hap:

Ou sinon, lancer un timer, et à chaque appel de la fonction, si le timer est inférieur à 1/f (f étant la fréquence max d'appel du programme), je ne fait rien?
Et dans le cas contraire, je fais ce que je dois faire, puis réinitialise le timer?

Par contre, ce que tu me dit serra surement indispensable si je veux un nombre fixe d'appel par seconde (ni plus, ni moins que f) :(
Et sinon, y'a pas moyen d'avoir un système de "signal" un peu comme dans Qt?
C'était pratique, on lançais un timer qui appelais régulièrement une fonction... Simple et efficace :fete:

Si non, comme faire pour que le timer s'incrémente régulièrement, alors que le reste de l'application se déroule normalement? Faut lancer un nouveau Thread? :doute:

Merci de ton aide en tout cas :-)

Pocolo
Pocolo
Niveau 10
29 septembre 2011 à 21:17:00

" Et sinon, y'a pas moyen d'avoir un système de "signal" un peu comme dans Qt?
C'était pratique, on lançais un timer qui appelais régulièrement une fonction... Simple et efficace :fete: "

Pour cela tu peux justement utiliser un autre thread.

Lutrinae
Lutrinae
Niveau 10
29 septembre 2011 à 21:29:44

Donc je lance un nouveau thread, dedans, je lance un timer, et dès qu'il est supérieur à 1/f, j'appelle la fonction? :question:

Lutrinae
Lutrinae
Niveau 10
29 septembre 2011 à 21:50:53

Bon ba je vais essayer ça, merci à vous deux :-)

tbop2
tbop2
Niveau 10
30 septembre 2011 à 12:51:31

Si je puis me permettre c'est pour quelle utilisation de maniere concrete ?

Lutrinae
Lutrinae
Niveau 10
30 septembre 2011 à 13:47:43

Une animation :-)))

Ok, un triangle en 2D qui bouge :hap:

caelacanthe
caelacanthe
Niveau 10
30 septembre 2011 à 13:49:38

ça vaut vraiment le coup de déployer un thread juste pour remplacer un compteur et une mise à jour régulière? :(

tbop2
tbop2
Niveau 10
30 septembre 2011 à 14:16:19

Ok c'est bien ce que je craignais. Tu te trompes ou t'embrouilles sur le principe.

En effet limiter le fps d'une animation a un frame rate maximal n'est pas une mauvaise idee. Pour cela il suffit juste d'encadrer la loop du jeu par une boucle qui ne se declenchera que toutes les x ms. Mais quel framework utilises tu ? Avec SFML par exemple c'est un truc qui doit s'appeler getTicks() je crois.

Lutrinae
Lutrinae
Niveau 10
01 octobre 2011 à 13:20:39

Désolé de répondre aussi, tard, il y a eu des problèmes d'internet vers chez moi, merci l'installation de la fibre optique :-(
(bon, je dirai plus ça dans quelques temps quand j'aurais du 10/100Mbits :coeur: )

Sinon, quel framework j'utilise, aucune idée :peur:
Je code sous visual C++ express, si ça peut aider :hap:
J'ai le .net framworte 4.0, c'est ça? :(

lnsane-Groove
lnsane-Groove
Niveau 10
03 octobre 2011 à 23:08:42

Framework = SDL, SFML, autre bibliothèque 2D? Pour ton triangle en 2D qui bouge ~ :hap: ~ .

Silvermo
Silvermo
Niveau 26
05 octobre 2011 à 07:54:01

En effet, la solution n'est pas de résoudre le problème de temps dans la fonction d'affichage, mais bien d'appeler la fonction affichage du triangle quand il le faut, pas plus, pas moins.

Il ne faut pas mélanger les choses, la partie du code qui affiche doit juste faire son boulot, et la partie du code qui calcule la fréquence à laquelle il faut raffraichir l'affichage doit être à part. Keep it simple.

Lutrinae
Lutrinae
Niveau 10
05 octobre 2011 à 23:21:58

Désolé de répondre aussi tard, je pensais que le topic était tombé dans les oubliettes du forum :peur:

Sinon j'utilise OpenGL et Glut, je crois que c'est ce dernier qui est équivalent de la SDL non? :question:

Et je pensais déjà faire une fonction s'occupant uniquement de la rotation, mais au lieu de faire tourner de 1°, et d’appeler cette fonction toutes les 100ms, vous pensez qu'il vaut mieux qu'elle le fasse tourner de 10° multiplié par le nombre de secondes écoulés depuis le dernier appel? :question:

Merci de votre aide en tout cas :fier:

Aldebran
Aldebran
Niveau 10
06 octobre 2011 à 14:17:43

"Et je pensais déjà faire une fonction s'occupant uniquement de la rotation, mais au lieu de faire tourner de 1°, et d’appeler cette fonction toutes les 100ms, vous pensez qu'il vaut mieux qu'elle le fasse tourner de 10° multiplié par le nombre de secondes écoulés depuis le dernier appel?"

Personnellement je te conseillerais plutôt de faire tourner de X° toute les Y ms (en ajustant comme tu le souhaites X et Y pour obtenir l'animation voulue, de préférence Y = 16,7ms pour obtenir du 60 fps).

Bunyan
Bunyan
Niveau 17
06 octobre 2011 à 15:58:37

Rotation * temps écoulé depuis la précédente.

Un timer n'est pas forcément précis, et il peut très bien se passer des événements indépendant de ta volonté qui vont le freezer (processeur utilisé à 100%, bye bye timer).
Enfin ... des expériences que j'ai eu avec des timer en Objective-C, jamais utilisé en C++.

Pocolo
Pocolo
Niveau 10
06 octobre 2011 à 16:08:36

Ça permets aussi d'éviter au programme de tourner en slow motion si jamais la machine n'arrive pas à le faire tourner à la vitesse prévue par le plafond de FPS.

Lutrinae
Lutrinae
Niveau 10
06 octobre 2011 à 19:24:59

Parfait, je vois ce que je dois faire, et bien merci beaucoup à vous tous :-)

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