J'en suis à mes premiers essais dans le domaine des timers mais...
J'ai fait un p'tit truc qui m'indique la résoultion des ticks à l'aide de la
fonction GetSystemTimeAdjustment
et qui m'indique combien d'itération de boucle vide on peut faire entre 2
tick...
Et ce truc, je l'ai fait tourner sur plusieur machines. A chaque fois, ma
fenetre m'indique le tick à lieu toutes les 15625 microsecondes.
C'est vrai sur toutes les machines ou non?
J'imagine que non, mais je n'ai pas pu tester sur toutes les machines que
j'ai trouvé, j'ai des problémes d'initialisation de l'appli sur certaines
machines...
Sinon, je me suis penché sur les "multimedia timer"
Mais je rencontre un ptetit probléme de compilation:
calculs temporels error LNK2001: symbole externe non résolu "unsigned int
__stdcall timeGetDevCaps(struct timecaps_tag *,unsigned int)"
(?timeGetDevCaps@@$$J18YGIPAUtimecaps_tag@@I@Z)
Qu'est ce que vous en pensez?
Et à propos de ces multimédia timers le
timeGetSystemTime
Il donne autre chose que le GetTickCount???
De toutes façons, je vais me lancer dans le "high résolution timer"...
Sinon, pour synchroniser l'évolution d'une boucle faisant de l'affichage sur
le temps passé indépendamment du matériel, quels fonctions vous me
conseillez?
Parce qu'en fait tout ce qui précéde part de petites animations (toutes
bétes) en OpenGL qui tournaient vachement bien sur des vieux duron avec un
pov carte vidéo et qui vont vraiment méchament trop vite sur un Athlon 2600+
avec une radeon 9800 pro.
> Sinon, je me suis penché sur les "multimedia timer" Mais je rencontre un ptetit probléme de compilation:
calculs temporels error LNK2001: symbole externe non résolu "unsigned int __stdcall timeGetDevCaps(struct timecaps_tag *,unsigned int)" (?timeGetDevCaps@@$$J18YGIPAUtimecaps_tag@@)
Qu'est ce que vous en pensez?
Bon cette partie là, j'ai trouvé, il fallait que je dise explicitement que j'utilisais le WinMM.Lib
Aurelien Regat-Barrel
Cyrcocq a écrit :
Bonjour;
Bonjour,
J'en suis à mes premiers essais dans le domaine des timers mais...
J'ai fait un p'tit truc qui m'indique la résoultion des ticks à l'aide de la fonction GetSystemTimeAdjustment et qui m'indique combien d'itération de boucle vide on peut faire entre 2 tick... Et ce truc, je l'ai fait tourner sur plusieur machines. A chaque fois, ma fenetre m'indique le tick à lieu toutes les 15625 microsecondes.
C'est vrai sur toutes les machines ou non?
Non. Il me semble que ça te donne la valeur du time-slice, qui varie en fonction de l'OS et du nombre de processeurs. Mais c'est dans ces eaux là (sous NT, 10 ms pour un monoproc / 15 pour un multi il me semble).
De toutes façons, je vais me lancer dans le "high résolution timer"...
Un petit lien à ce sujet: http://www.sysinternals.com/Information/HighResolutionTimers.html
-- Aurélien Regat-Barrel
Cyrcocq a écrit :
Bonjour;
Bonjour,
J'en suis à mes premiers essais dans le domaine des timers mais...
J'ai fait un p'tit truc qui m'indique la résoultion des ticks à l'aide de la
fonction GetSystemTimeAdjustment
et qui m'indique combien d'itération de boucle vide on peut faire entre 2
tick...
Et ce truc, je l'ai fait tourner sur plusieur machines. A chaque fois, ma
fenetre m'indique le tick à lieu toutes les 15625 microsecondes.
C'est vrai sur toutes les machines ou non?
Non. Il me semble que ça te donne la valeur du time-slice, qui varie en
fonction de l'OS et du nombre de processeurs. Mais c'est dans ces eaux
là (sous NT, 10 ms pour un monoproc / 15 pour un multi il me semble).
De toutes façons, je vais me lancer dans le "high résolution timer"...
Un petit lien à ce sujet:
http://www.sysinternals.com/Information/HighResolutionTimers.html
J'en suis à mes premiers essais dans le domaine des timers mais...
J'ai fait un p'tit truc qui m'indique la résoultion des ticks à l'aide de la fonction GetSystemTimeAdjustment et qui m'indique combien d'itération de boucle vide on peut faire entre 2 tick... Et ce truc, je l'ai fait tourner sur plusieur machines. A chaque fois, ma fenetre m'indique le tick à lieu toutes les 15625 microsecondes.
C'est vrai sur toutes les machines ou non?
Non. Il me semble que ça te donne la valeur du time-slice, qui varie en fonction de l'OS et du nombre de processeurs. Mais c'est dans ces eaux là (sous NT, 10 ms pour un monoproc / 15 pour un multi il me semble).
De toutes façons, je vais me lancer dans le "high résolution timer"...
Un petit lien à ce sujet: http://www.sysinternals.com/Information/HighResolutionTimers.html
-- Aurélien Regat-Barrel
Cyrcocq
Excusez moi, mais j'y reviens.
Bonjour; ...
Sinon, pour synchroniser l'évolution d'une boucle faisant de l'affichage sur le temps passé indépendamment du matériel, quels fonctions vous me conseillez? Parce qu'en fait tout ce qui précéde part de petites animations (toutes bétes) en OpenGL qui tournaient vachement bien sur des vieux duron avec un pov carte vidéo et qui vont vraiment méchament trop vite sur un Athlon 2600+ avec une radeon 9800 pro.
Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Excusez moi, mais j'y reviens.
Bonjour;
...
Sinon, pour synchroniser l'évolution d'une boucle faisant de l'affichage
sur le temps passé indépendamment du matériel, quels fonctions vous me
conseillez?
Parce qu'en fait tout ce qui précéde part de petites animations (toutes
bétes) en OpenGL qui tournaient vachement bien sur des vieux duron avec un
pov carte vidéo et qui vont vraiment méchament trop vite sur un Athlon
2600+ avec une radeon 9800 pro.
Et j'ajoute:
J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment
économiser ces ressources mais avoir le même résultat sur toutes les
machines? (la même distance parcourue à l'exclusion du nombre d'image par
secondes)
Sinon, pour synchroniser l'évolution d'une boucle faisant de l'affichage sur le temps passé indépendamment du matériel, quels fonctions vous me conseillez? Parce qu'en fait tout ce qui précéde part de petites animations (toutes bétes) en OpenGL qui tournaient vachement bien sur des vieux duron avec un pov carte vidéo et qui vont vraiment méchament trop vite sur un Athlon 2600+ avec une radeon 9800 pro.
Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Aurelien Regat-Barrel
> Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Une idée comme ça: - un thread de dessin (le thread principal) - un thread de controle du dessin (un nouveau thread créé avec une priorité élevée)
HANDLE hPaintSync; // event de controle du dessin
// thread de priorité elevée void control_thread() { while ( play_animation ) { // envoyer un ordre de dessin tous les 50 ms WaitForSingleObject( GetCurrentThread(), 50 ); SetEvent( hPaintSync ); } CloseHandle( hPaintSync ); }
// thread de dessin int main() { // initialiser create_sync_event_and_control_thread();
// boucle de dessin while ( play_animation ) { paint(); // attendre un ordre de dessin WaitForSingleObject( hPaintSync, INFINITE ); }
// libérer... }
Bref, tu vois l'idée...
-- Aurélien Regat-Barrel
> Et j'ajoute:
J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment
économiser ces ressources mais avoir le même résultat sur toutes les
machines? (la même distance parcourue à l'exclusion du nombre d'image par
secondes)
Une idée comme ça:
- un thread de dessin (le thread principal)
- un thread de controle du dessin (un nouveau thread créé avec une
priorité élevée)
HANDLE hPaintSync; // event de controle du dessin
// thread de priorité elevée
void control_thread()
{
while ( play_animation )
{
// envoyer un ordre de dessin tous les 50 ms
WaitForSingleObject( GetCurrentThread(), 50 );
SetEvent( hPaintSync );
}
CloseHandle( hPaintSync );
}
// thread de dessin
int main()
{
// initialiser
create_sync_event_and_control_thread();
// boucle de dessin
while ( play_animation )
{
paint();
// attendre un ordre de dessin
WaitForSingleObject( hPaintSync, INFINITE );
}
> Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Une idée comme ça: - un thread de dessin (le thread principal) - un thread de controle du dessin (un nouveau thread créé avec une priorité élevée)
HANDLE hPaintSync; // event de controle du dessin
// thread de priorité elevée void control_thread() { while ( play_animation ) { // envoyer un ordre de dessin tous les 50 ms WaitForSingleObject( GetCurrentThread(), 50 ); SetEvent( hPaintSync ); } CloseHandle( hPaintSync ); }
// thread de dessin int main() { // initialiser create_sync_event_and_control_thread();
// boucle de dessin while ( play_animation ) { paint(); // attendre un ordre de dessin WaitForSingleObject( hPaintSync, INFINITE ); }
// libérer... }
Bref, tu vois l'idée...
-- Aurélien Regat-Barrel
Cyrille Szymanski
"Cyrcocq" wrote in news:431766fa$0$21293$:
Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Comme indexer la fonction de dessin sur l'horloge et non d'autres compteurs tels que le nombre de passages dans la fonction de dessin par exemple ?
Du genre "position = f(horloge)" au lieu de faire "position++" à chaque passage dans la boucle.
-- Cyrille
"Cyrcocq" <cyrcocq@...> wrote in
news:431766fa$0$21293$7a628cd7@news.club-internet.fr:
Et j'ajoute:
J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment
économiser ces ressources mais avoir le même résultat sur toutes les
machines? (la même distance parcourue à l'exclusion du nombre d'image
par secondes)
Comme indexer la fonction de dessin sur l'horloge et non d'autres compteurs
tels que le nombre de passages dans la fonction de dessin par exemple ?
Du genre "position = f(horloge)" au lieu de faire "position++" à chaque
passage dans la boucle.
Et j'ajoute: J'ai lu que les timer prennaient beaucoup de temps porcesseur. Comment économiser ces ressources mais avoir le même résultat sur toutes les machines? (la même distance parcourue à l'exclusion du nombre d'image par secondes)
Comme indexer la fonction de dessin sur l'horloge et non d'autres compteurs tels que le nombre de passages dans la fonction de dessin par exemple ?
Du genre "position = f(horloge)" au lieu de faire "position++" à chaque passage dans la boucle.