Bonjour, je ne trouve pas de documentation pour la fonction delay();, qui, je crois, est spécifique au DOS. Pouvez-vous m'orienter vers un équivalent en C ANSI ?
Bonjour, je ne trouve pas de documentation pour la fonction delay();, qui, je crois, est spécifique au DOS. Pouvez-vous m'orienter vers un équivalent en C ANSI ?
tu peux utiliser cette fonction pour pauser ton application :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <time.h> void my_delay(int i) /*Pause l'application pour i seconds*/ { clock_t start,end; start=clock(); while(((end=clock())-start)<=i*CLOCKS_PER_SEC); }
serait-il possible d'avoir des subdivisions en milli ou micro-secondes ?
pour le code en milliseconds :
sinon , si vous travaillez en interface graphique avec SDL vous pouvez utiliser la fonction SDL_Delay() qui prend en argument les milliseconds pendant lesquel l application devient inactive, ca mobilize moins les ressource.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <time.h> void my_delay(int i) /*Pause l'application pour i ms*/ { clock_t start,end; start=clock(); while(((end=clock())-start)<=((i*CLOCKS_PER_SEC)/1000)); }
@siegfried64 :
je me répète, mais QUAND ON NE SAIT PAS ON SE TAIT !!!!!!!!!!!!!!
Et surtout on ne dit pas de bêtises....
Quant à la question, la réponse est ici :
http://man.developpez.com/man1/usleep.1.php
Si l'attente est en nombre de secondes, alors il y a sleep http://man.developpez.com/man1/sleep.1.php
Et par contre, le SEUL cas où la solution proposée par siegfried64 est correcte, est dans le cas où ce n'est pas une VRAIE pause, mais où on veut exécuter un morceau de code PENDANT un certain temps... (que l'on mettra dans le while)
Il n'y a pas de fonction C ANSI correspondante.
Windows : Sleep(millisecondes) (<windows.h>)
POSIX.1 : sleep(secondes) et usleep(microsecondes) (<unistd.h>)
Ceci peut aider :
http://delahaye.emmanuel.free.fr/clib/psleep/
Comment fonctionnent les fonctions d'attente? Je parle de celle qui ne font pas travailler le cpu à fond avec une boucle. Je ne comprends pas comment faire ce genre de fonction peut marcher sans boucle du même genre.
Le programme est bien obligé de vérifier en continu, on ne peut pas lui dire "d'attendre".
C'est une question de système.
Certains systèmes sont capables de suspendre un processus ou une tâche pendant un certain temps. C'est l'horloge interne (sous interruptions) qui surveille l'échéance. Le temps n'est pas garanti. Quand on fait Sleep(100), on demande 100 ms de suspension au minimum.
Ah ok ça se passe en bas. Et si le système ne le permet pas, comment on contourne le problème?
Pourquoi au minimum?
Bon en fait si quelqu'un a des liens qui me permettraient de comprendre plus précisément je suis preneur.
Merci
Comme sous MS-DOS, on fait de boucles actives (comme le delay() de Borland).
Parce que le mécanisme de suspension ne garanti pas pas que la réactivation se fasse au moment prévu. Il peut se faire plus tard si un processus ou une tâche plus prioritaire se débloque...Pourquoi au minimum?
Tu devrais étudier un peu les systèmes...Bon en fait si quelqu'un a des liens qui me permettraient de comprendre plus précisément je suis preneur.
Merci, je crois que je vais m'y mettre ça fait un moment que je me demande comment marchent les interruptions, les signaux,...
Partager