J'ai creer une fonction graphique d'affichage et j'aimerai qu'elle s'exécute toutes les deux secondes.
Est ce qu'il existe un moyen en C de fixer la période d'éxécution (en seconde) d'une fonction ??
D'avance merci
J'ai creer une fonction graphique d'affichage et j'aimerai qu'elle s'exécute toutes les deux secondes.
Est ce qu'il existe un moyen en C de fixer la période d'éxécution (en seconde) d'une fonction ??
D'avance merci
Tu peux faire une boucle de temporisation; par exemple:
Et ajuste la valeur maximale de i pour obtenir a peu pres 2 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (i = 0; i < 9999999; i++)
Une autre méthode consisite à utiliser la fonction sleep() ou usleep()
Elles prennent en paramettre la durée d'attente(en millisecondes je crois)
N'hésites pas si t as des questions ...
Ce système va engranger plusieurs problèmes :Envoyé par Fragonard
1. Il va utiliser toutes les ressources de ta machine pendant ce temps, alors que je suppose que ton programme à autre chose à faire.
2. Pour obtenir 2 secondes exactement tu vas en effectuer des tests afin de trouver le bon nombre à passer dans la boucle.
3. si tu changes de machine, ton temps ne sera plus de 2 secondes, car l'exécution des cycles sera plus rapide (ou plus lente) suivant le CPU utilisé.
Tu peux utiliser SetTimer(), il exécutera ta fonction dans les bons délais.
pour sleep() c'est des secondesEnvoyé par Fragonard
et le problème avec cette fonction c'est que je n'ai pas réussi à l'arreter
Tu peux faire ta fonction de pause :
Puis tu l'appelles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void pause( int nb_sec ) { clock_t val ; val= (nb_sec * CLOCKS_PER_SEC ) + clock() ; while( val > clock() ) ; }
Nas'
Code : Sélectionner tout - Visualiser dans une fenêtre à part pause( (int) 2 ) ;
Comment ca l'arreter ? Soit tu creer un handler de signal et tu balance un signal pour reveiller le process, soit tu fais des thread, dont un qui ne fait que dormir et quand il se reveille, il declanche l'affichage.Envoyé par Willand
Ou une thread d'affichage qui fait unà la fin de l'affichage et qui tourne en boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sleep(2);
J'ai l'habitude de travailler sous linux et ce genre de problèmes se résoud grace aux signaux et je pense que cela existe sous windows puisque c'est une norme Posix.
Dans ton cas il suffit de redéfinir le signal SIGALRM, je te conseille de consulter sur le net ou sur le manuel linux la structure sigaction ainsi que l'appelle sigaction.
J'espere que cette solution te conviendra et elle me semble la plus adaptée a ton problème.
Je ne suis pas sur que Windows respecte la norme POSIX. Il me semble que POSIX c'est pour UNIX et LINUX.
et Sleep() (attention à la majuscule !!) ne marche pas non plus ?
Sleep() prend en paramètre des millisecondes.
Méa culpa Metal Tom pour Posix .
Suite a ta remarque j'ai fait des recherches et voila ce que j'ai obtenu
Donc Posix est une norme UNIX. Je ne connais pas la programmation système windows mais je suis sur qu'il existe un systeme de signaux permettant de résoudre le problème du monsieur.[POSIX] Portable Operating System for Computer Environment. Norme Unix de l'IEEE, numérotée « 1003.1 », et qui spécifie le noyau du système. La norme POSIX 1-b spécifie les noyaux temps réel. La « 1-c » spécifie les threads. C'était une norme excellente, mais qui fut remplacée par les Spec1170.
A bientot
En fait comme beaucoup de monde j'ai appris la programmation système sous Linux/UNIX donc la prog système Windows : connais pas bien.
Mais en tout cas sous Linux/UNIX on peut faire des trucs puissants assez facilement. Ca c'est sûr.
La fonction sleep marche t'elle sur les environnements windows ?
La fonction Sleep (avec une majuscule) existe : http://msdn.microsoft.com/library/en...base/sleep.aspEnvoyé par Sylk
En bas de l'article donné par gl:
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
tu as en effet :
Sleep(millisecondes)
mais le mieux sous windows c'est d'utiliser un timer (regarde la fonction
SetTimer)
Partager