[C] Placer un délai dans l'éxecution d'un programme

Placer un délai dans l'éxecution d'un programme [C] - C - Programmation

Marsh Posté le 10-02-2004 à 15:52:36    

Je dois retarder les instructions de mon programme (sortie sur un convertisseur numérique/analogique).
Il y a bien les fonctions time et clock.
 
J'ai utilisé
 
while((clock() - debutboucle)<(periode)*(CLOCKS_PER_SEC)){ }
 
ce qui fait que il fait { }, soit rien, tant que le délai est inférieur à la période.
 
Ca marche, mais dès que je veux descendre en dessous de 50ms, bein ca fait n'importe quoi !
 
Vous connaissez autre chose ?
 
Merci


Message édité par dcvlm le 10-02-2004 à 15:53:57
Reply

Marsh Posté le 10-02-2004 à 15:52:36   

Reply

Marsh Posté le 10-02-2004 à 16:14:55    

c'est nimp
 
regarde du côté de sleep, usleep et ->nanosleep<-

Reply

Marsh Posté le 10-02-2004 à 17:34:59    

Taz a écrit :

c'est nimp
 
regarde du côté de sleep, usleep et ->nanosleep<-


 
ouais, g essayé, et effectivement, c plus précis..
 
Mais mon prb actuel : je n'ai accès qu'a sleep depuis mon time.h
Pas de usleep, ni nanosleep
J'utilise Bloodshed Dev-C++ v.4.9.8.0
 
Peux tu m'aider ???  :cry:  :cry:

Reply

Marsh Posté le 10-02-2004 à 17:48:17    

bah t'avais qu'à dire « Windows »
 
la solution :
- fais une recherche, cette question est sortie plusieurs fois le mois dernier
- renomme en [Windows]
- lis ta msdn bordel

Reply

Marsh Posté le 10-02-2004 à 17:59:07    

#include <windows.h>
Sleep(tempsEnMs);

Reply

Marsh Posté le 10-02-2004 à 18:47:47    

+1 pour Sleep(val)

Reply

Marsh Posté le 10-02-2004 à 19:04:58    

Essaie de regarder à performance timer sous windows.
 
LeGreg

Reply

Marsh Posté le 10-02-2004 à 19:06:13    

oh hé  :pt1cable:  
 
oui, sleep(ms), dans windows.h, je sais.
 
Mais j'ai dis que c ne m'allait pas, je veux des délais + courts !
 
Et je suis allé lire ma msdn, mais à part sleep et sleepex --> ils connaissent pas les usleep et nanosleep !!!!


---------------
ZZZZzzzzz
Reply

Marsh Posté le 10-02-2004 à 19:46:50    

bin comme dit LeGreg rensigne toi du coté du performance counter


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 10-02-2004 à 19:47:35    

taz a écrit :

bah t'avais qu'à dire « Windows »

Reply

Marsh Posté le 10-02-2004 à 19:47:35   

Reply

Marsh Posté le 10-02-2004 à 21:06:28    


 
qu'est-ce que tu veux dire ??
 
sinon, g rapidement jetté un coup d'oeil sur performance counter sur mdsn, je suis pas trop bilingue, et tjs est-il que je n'ai pas vu de solutions pr integrer ca ds mon petit programme c de rien du tout  :( et ailleurs sur internet, bah je vois rien qui m'inspire !
 
Mais sinon, comment ca ce fait que nanosleep ne soit pas reconnu ?
 
Merci !


---------------
ZZZZzzzzz
Reply

Marsh Posté le 10-02-2004 à 21:10:30    

ben que t'as qu'à spécifier ta plateforme quand tu poses une question. sinon t'étonnes pas que les gens répondent quelque chose qui ne fonctionne pas chez toi.

Reply

Marsh Posté le 10-02-2004 à 21:11:52    

Oui, c vrai. Mais je suis vraiment ds mes débuts en prog... et j'avais pas pensé à le spécifier !


---------------
ZZZZzzzzz
Reply

Marsh Posté le 10-02-2004 à 21:14:15    

usleep et nanosleep font partie de l'api linux, pas de l'api windows.
 
pour le performance counter je peux pas t'aider g jms fait :p


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 10-02-2004 à 21:15:49    

nanosleep est POSIX et usleep est BSD je crois

Reply

Marsh Posté le 10-02-2004 à 21:56:09    

DcVLM a écrit :

Oui, c vrai. Mais je suis vraiment ds mes débuts en prog... et j'avais pas pensé à le spécifier !


 
t'en fais pas Taz est coutumier du fait.
 
LeGreg

Reply

Marsh Posté le 10-02-2004 à 22:11:34    

ne me dites pas que je suis fais comme un rat !!! :(


---------------
ZZZZzzzzz
Reply

Marsh Posté le 10-02-2004 à 22:43:28    

apprends l'anglais :o

Reply

Marsh Posté le 10-02-2004 à 23:15:27    

Lecon 1 : hello world [:itm]

Reply

Marsh Posté le 11-02-2004 à 08:27:26    

Mais Sleep travaille à la milliseconde tout de même ...
ça suffit pas ?

Reply

Marsh Posté le 11-02-2004 à 08:31:37    

cricri_ a écrit :

Mais Sleep travaille à la milliseconde tout de même ...
ça suffit pas ?
 

De tête, au mieux tu peux avoir 10ms sous les NT et 55ms sous les 9x..

Reply

Marsh Posté le 11-02-2004 à 10:49:45    

*Syl* a écrit :

De tête, au mieux tu peux avoir 10ms sous les NT et 55ms sous les 9x..


 
Ouais, c ca, j'arrive à 10ms sans prb, et par ex, 8ms, ca me fait dja 26% d'écart sur le résultat théorique...
 
Je pense donc faire une petite boucle à la con, dont je mesurerai le temps pour 1000...00 exécutions, et en divisant par le nombre d'éxecutions, j'aurais un tps unitaire, et si je veux x secondes, j'aurais qu'a faire (x/tps unitaire) fois la boucle...
Qu'en pensez vous.. ?
 
Pour le remplissage de la boucle, j'ai fait un petit bricoloage avec rand()... Que me proposez vous d'autre ??
 
Merci !

Reply

Marsh Posté le 11-02-2004 à 11:29:37    

j'en pense que le thread va pas dormir, que ton prog va donc claquer toutes les ressources cpu disponibles.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 11-02-2004 à 12:11:39    

blackgoddess a écrit :

j'en pense que le thread va pas dormir, que ton prog va donc claquer toutes les ressources cpu disponibles.


 
oui, c bien ce qui se passe !! Mais ca, à la limite, je m'en fout un peu... (c pr faire d'un PC un GBF...)
 
Ce qui m'interesse, c d'avoir un intervalle de temps tres court pdt lequel mon programme n'avance pas (ou alors, à rien faire !!)..

Reply

Marsh Posté le 11-02-2004 à 13:13:22    

ton convertisseur numérique/analogique il est attaqué comment ?
 
un tel matériel a sa propre horloge de conversion, et un tampon matériel entre le convertisseur et ton cpu.
 
sinon si tu comptes alimenter l'horloge du convertisseur en direct live du cpu, c'est du n'importe quoi (que ce soit sous Windows ou sous Linux)...

Reply

Marsh Posté le 11-02-2004 à 13:16:49    

et quel et l'ordre de grandeur de ta fréquence de conversion ?

Reply

Marsh Posté le 11-02-2004 à 13:57:10    

A une epoque, sous windows, le timer le plus precis etait le multimedia timer. http://msdn.microsoft.com/library/ [...] lution.asp
Je ne sais si c'est toujours le cas.
Pour ceux qui font du .NET, lire ceci aussi: http://msdn.microsoft.com/msdnmag/ [...] fault.aspx
 
Et pour ceux qui veulent une resolution superieure, il faut alors envisager ceci: http://www.vci.com/products/windows_embedded/rtx.asp
A+,


Message édité par gilou le 11-02-2004 à 14:21:28

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-02-2004 à 16:12:27    

bjone a écrit :

et quel et l'ordre de grandeur de ta fréquence de conversion ?


 
En fait, c un projet qu'on a à faire... Nous on a pris le Générateur de Fonctions (GBF).
 
Pr le moment on a pas encore notre carte (que l'autre partie de notre grpe développe -schéma élé, orcade, layout, fabrication-...) : on a qu'une basique carte d'extension sur PCI avec des barregraphes.
 
Mais qd la carte sera finie, ca ira vers un convertisseur numérique --> analogique, puis filtres, puis amplis... vers BNC.
 
Exple sur un signal à 5kHz (la frq max qu'on nous impose), période de 2ms, donc si on veut 1000 points, faut sortir des valeurs toutes les 2 mirco sec.... Et dc mon but c ca : SORTIR DES VALEURS TOUTES LES QQS MIRCO SEC !!!!


Message édité par dcvlm le 11-02-2004 à 16:13:29
Reply

Marsh Posté le 11-02-2004 à 16:30:09    

C'est pas gagné à mon avis à moins que cela soit le hardware qui déclanche directement une tache d'acquisition, mais suis pas sûr du tout que cela soit possible sous windows, à moins peut-être d'écrire un driver lié à cette carte d'acquisition.
Après faut passer à des systèmes temps réel sous windows genre RTXwin ou VxWork ( suis pas sûr du tout de l'orthographe ...).

Reply

Marsh Posté le 11-02-2004 à 17:44:11    

bah personnellement j'aurai pris une carte son, et pi tu caches la carte son sous la carte maison :D
 
nan, en fait donc à priori c'est une carte son mono 5Khz que vous utilisez :D
 
bon ma remarque est: 2µs sans glissement sous Windows avec un process classique j'y crois moyen.
 
donc le mieux c'est un driver qui se base sur le timer rapide du PC, ou un truc du genre.
 
l'implémentation idéale étant d'avoir un tampon matériel sur la carte qui est consommé par le convertisseur via une horloge matérielle programmable sur la carte PCI, que tu remplis via ton process (et via un driver de toutes manières).


Message édité par bjone le 11-02-2004 à 17:44:48
Reply

Marsh Posté le 11-02-2004 à 21:01:37    

bjone a écrit :

bah personnellement j'aurai pris une carte son, et pi tu caches la carte son sous la carte maison :D
 
nan, en fait donc à priori c'est une carte son mono 5Khz que vous utilisez :D
 
bon ma remarque est: 2µs sans glissement sous Windows avec un process classique j'y crois moyen.
 
donc le mieux c'est un driver qui se base sur le timer rapide du PC, ou un truc du genre.
 
l'implémentation idéale étant d'avoir un tampon matériel sur la carte qui est consommé par le convertisseur via une horloge matérielle programmable sur la carte PCI, que tu remplis via ton process (et via un driver de toutes manières).


 
1ère question : c quoi un glissement ?
 
2ème : un driver qui se base sur le timer du rapide du PC !!! Alors là, je vois absolument pas ! C quoi le timer rapide ?
 
3ème : qd tu parlais d'implémentation sur la carte : j'ai compris : une partie hardware sur la carte, qui génére un signal, qu'on récupere sur le PC, via la carte ? G compris ?
 
 
merci de votre aide ! :hello:

Reply

Marsh Posté le 11-02-2004 à 23:06:15    

si tu n'as pas peur de l'assembleur il y a rdtsc qui traine
mais c'est limite off topic ici.
 
LeGreg

Reply

Marsh Posté le 11-02-2004 à 23:27:44    

oh la la.... Assembleur.... Tu veux dire programmation en assembleur !!! Je connais que de nom....Et à peine... je vois meme pas clairement ce que c'est !!! :(

Reply

Marsh Posté le 11-02-2004 à 23:28:11    

LeGreg a écrit :

si tu n'as pas peur de l'assembleur il y a rdtsc qui traine
mais c'est limite off topic ici.
 
LeGreg
 


 
y'a aussi harko :o
 
[:dehors]

Reply

Marsh Posté le 12-02-2004 à 00:50:50    

quand je dis glissement, c'est les problèmes que t'as quoi....
tu demandes 2µs, t'en as 1 ou 10, voire 100ms si y'a un accès disque etc etc...

Reply

Marsh Posté le 27-04-2004 à 11:48:39    

existe-t-il des fonctions de type "sleep()" multi-plateformes, sans devoir créer de threads?


---------------
blog dessins + srtCleaner | Ricoh R6 | K20d | MK-wii 5112-3549-9484 | en phase de déblablatisation depuis le 26 avril 2002 | Belgian Connection
Reply

Marsh Posté le 27-04-2004 à 11:50:57    

sisicaivrai a écrit :

existe-t-il des fonctions de type "sleep()" multi-plateformes, sans devoir créer de threads?

:heink:

Reply

Marsh Posté le 27-04-2004 à 11:54:58    

soit ça confirme ce que je pensais et c'est non, soit j'ai dit une connerie :o


---------------
blog dessins + srtCleaner | Ricoh R6 | K20d | MK-wii 5112-3549-9484 | en phase de déblablatisation depuis le 26 avril 2002 | Belgian Connection
Reply

Marsh Posté le 27-04-2004 à 13:10:35    

à ton avis? c sans doute une connerie -- les threads n'ont rien à voir dans cette histoire...

Reply

Marsh Posté le 27-04-2004 à 14:32:54    

je voulais dire sans utiliser de multithread?


---------------
blog dessins + srtCleaner | Ricoh R6 | K20d | MK-wii 5112-3549-9484 | en phase de déblablatisation depuis le 26 avril 2002 | Belgian Connection
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed