Equivalent timer rapide (intervalle de 10ms)

mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 30 janv. 2008 à 01:19
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 3 févr. 2008 à 00:48
Bonjour,

Pour un de mes programmes, j'utilise une boucle prenant assez de temps (10 secondes), dans lequel je dois utiliser des sleep 10 (les timer ne pouvant pas aller aussi vite)
Cependant, les sleep (c'est normale, ils sont faits comme ça) stoppent tout ce qui se passe derrière dans mon programme.
J'aimerais donc savoir s'il existe une fonction pour patienter 10 ms dans ma boucle (un timer ne permet que des espaces supérieurs à environ 30 ms) tout en laissant le reste du programme se dérouler derrière.

Merci beaucoup :)

 Pourapprendretoujoursplus!

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 janv. 2008 à 20:58
Ben ça va etre assez difficile.

Il faut que tu te fasse ta propre fonction d'attente. Tu peux utiliser l'api GetTickCount pour avoir une base de temps un petit peu plus précise que le timer de VB. (le must étant  QueryPerformanceCounter, si ta machine le permet, ce n'est pas le cas de toutes).

Le problème étant l'attente, tu va etre obligé de boucler.
Alors soit tu monopolise le CPU, à ce moment là tu vas figer ton appli mais tu pourras à peu prés respecter les temps, soit tu ne fige pas l'appli en utilisant DoEvents, et là te prendre facilement 20 à 50ms dans la vue.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
30 janv. 2008 à 21:05
Salut, merci de la réponse :)

Hmmm le problème pour mon appli, c'est que j'ai d'autres trucs à afficher derrière en même temps pendant la boucle, donc le doevents est indispensable ici.
Avec la fonction sleep, ça allait bien (sauf que tout le reste de mon appli ne fonctionnait plus durant la boucle). J'ai donc utilisé un timer, mais c'est à peu près 2 ou 3 fois plus lent, et ça gâche un peu mon animation.
Mais je vais essayer GetTickCount et QueryPerformanceCounter, merci beaucoup pour ton aide :)

 Pourapprendretoujoursplus!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 févr. 2008 à 23:11
As-tu essayé avec la fonction interne Timer (pas le contrôle) ?
une idée comme ça ... et pas testée non plus ...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 févr. 2008 à 00:06
Hmmm j'ai pensé à l'utiliser, mais la fonction timer ne donne que un nombre en secondes en fait, donc beaucoup trop long.
En plus, pour l'utiliser il faudrait faire un loop je pense, et donc ça empêcherait les autres actions du programme de fonctionner.
J'ai utilisé un timer (contrôle) finalement, même si l'animation est plus lente.

(En fait j'ai fait (fini) un tétris, 5 modes de jeux différents, tous jouables soit à 1 joueur, soit à 2 joueurs, et le truc c'est que je fais une animation quand un des joueurs perd, mais l'autre doit pouvoir jouer pendant ce temps encore derrière. L'animation doit être rapide, et doit permettre à l'autre joueur de jouer (et de faire une animation similaire sur sa partie de l'écran si il perd aussi, ou une animation s'il passe au niveau suivant en mode puzzle, etc...)
Il est pas mal :)
J'ai enlevé tous les bugs je pense sauf un qui ne m'est arrivé qu'une fois à partir de l'exe (donc je n'ai pas vu d'où venait l'erreur) et que je n'ai plus jamais réussi à reproduire :/)
Enfin bref c'est plus trop en rapport avec la question tout ça, en tout cas merci infiniment tous les deux pour votre précieuse aide, j'ai encore découvert de nouvelles fonctions grâce à vous, c'est super ^^

Me manque encore quelques programmes basiques à faire (genre jeu d'échecs, jeu de dame, puissance4, etc... avec IA (sachant que l'IA est exactement la même pour chaque jeu, donc c'est assez rapide à faire tout ça, il manque plus que les régles et le jeu en réseauà côté), et des petits trucs dans le genre, et puis je me lance dans les jeux en DirectX style mario :) (et apprendre le C,C++ et java tout seul après pour voir ;-)  )

Pour ce qui est des jeux de plateau, j'ai fait un jeu d'othello (j'ai regardé sur le net, j'en ai pas vu un avec autant d'options que le mien même s'ils sont payants), j'avais fait des trucs pour analyser les parties, (les variations sont montrées sous forme d'arbre, ... un simple clic sur l'arbre amène direct au coup, ...) sauvegarde/chargement des parties avec toutes les variations et des commentaires pour chaque coups, IA, jeu en réseau, plein d'options graphiques.... enfin bref je ferai moins de choses pour les jeux à venir, celui m'a pris trop de temps... (surtout gérer graphiquement l'arbre...)

Oula... je viens de me relire, on dirait bien que j'avais besoin de parler moi...
Je vais me coucher, ça ira mieux lol.
Bonne nuit à tous les deux, à bientôt, et bonne programmation !

 Pourapprendretoujoursplus!
0

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

Posez votre question
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 févr. 2008 à 00:07
(Et désolé pour ce roman qui n'est pas très intéressant et qui n'a aucun rapport avec la question :/ )

 Pourapprendretoujoursplus!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 févr. 2008 à 00:18
Salut mstartsup5,
Timer retourne une valeur en millisecondes...

Fais le test
    Dim Var As Double
   
    Var = Timer
    MsgBox Var

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 févr. 2008 à 00:22
Ah, les quelques trucs que j'ai lu sur le net disaient que ça retournait une valeur en secondes, j'aurais dû vérifier, honte à moi.
Merci.
Tu sais comment l'utiliser sans utiliser de boucle ni de timer (contrôle) dans ce cas là? (si oui c'est nickel, sinon toujours le même problème ^^")

 Pourapprendretoujoursplus!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 févr. 2008 à 00:30
Si tu fais une boucle et que tu insères un DoEvents, ça devrait être "transparent", non ?
Mer... j'ai fais le même genre d'exercice aujourd'hui sur un autre post mais je ne me rappelle plus où (?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
3 févr. 2008 à 00:48
Si je fais un doevents (j'ai testé encore et encore) ça a bien le temps de m'afficher l'animation, seulement pour ce qui se passe derrière, ça me fait les timers et les autres fonctions, etc, mais par contre dès qu'il s'agit de lancer la même animation sur l'écran d'à côté (appeler la même fonction que celle qui est utilisée durant la boucle), ça me freeze l'image de la première animation (l'animation ne redémarre qu'une fois que la 2ème animation s'est terminée).
De plus le timer est plus lent que le sleep d'après mes tests: j'obtiens le même résultat en utilisant des timer contrôles en ayant le problème de l'animation qui se gêle en moins.

Cela dit je pense que ce n'est pas très grave, ça risque d'être un peu long pour le joueur, mais ce n'est pas non plus catastrophique.
Merci beaucoup pour l'aide, et désolé de ne pas avoir testé la fonction timer par moi même, il faudrait que je me méfie des fois de ce que je lis sur internet, même si les gars sont sûrs d'eux...

 Pourapprendretoujoursplus!
0
Rejoignez-nous