begin process at 2012 02 13 08:43:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > UNE PETITE PAUSE, EN MICROSECONDE.

UNE PETITE PAUSE, EN MICROSECONDE.


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :pause, microseconde Niveau :Débutant Date de création :22/04/2005 Date de mise à jour :22/04/2005 00:06:47 Vu :8 887

Auteur : rylryl

Ecrire un message privé
Site perso
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

C'est rare mais des fois on ne veut pas que ça aille trop vite !

bonne pause !

ryl...

Source

  • Exemples d'utilisation:
  • DelayUS (1) = 1 µS
  • DelayUS (100) = 100 µS
  • DelayUS (100000) = 100 mS
  • DelayUS (1000000) = 1 S
  • ------------------------------------------
  • Option Explicit
  • Private Declare Function QueryPerformanceCounter Lib "kernel32" _
  • (X As Currency) As Boolean
  • Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
  • (X As Currency) As Boolean
  • '//////////////////////////
  • '// Attendre N microSeconde
  • Private Sub DelayUS(MicroS)
  • Dim Frq_Base As Currency, Time_memo As Currency, Time_now As Currency
  • Dim dif As Long
  • If QueryPerformanceFrequency(Frq_Base) Then ' Base fréquence systême
  • QueryPerformanceCounter Time_memo ' Repère temps
  • Do
  • QueryPerformanceCounter Time_now ' Comparer le Repère temps au temps qui
  • dif = (Time_now - Time_memo) * 1000000 / Frq_Base ' s'écoule
  • Loop Until dif > MicroS ' Si pause pas suffisante recommencer
  • End If
  • End Sub
Exemples d'utilisation:

DelayUS (1)			= 1 µS
DelayUS (100)			= 100 µS
DelayUS (100000)		= 100 mS
DelayUS (1000000)		= 1 S

			------------------------------------------

Option Explicit

Private Declare Function QueryPerformanceCounter Lib "kernel32" _
                                 (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
                                 (X As Currency) As Boolean
                                 
                                 

'//////////////////////////
'// Attendre N microSeconde
Private Sub DelayUS(MicroS)
  Dim Frq_Base As Currency, Time_memo As Currency, Time_now As Currency
  Dim dif As Long
       
  If QueryPerformanceFrequency(Frq_Base) Then ' Base fréquence systême
    QueryPerformanceCounter Time_memo       ' Repère temps
    Do
        QueryPerformanceCounter Time_now    ' Comparer le Repère temps au temps qui
        dif = (Time_now - Time_memo) * 1000000 / Frq_Base  ' s'écoule
    Loop Until dif > MicroS          ' Si pause pas suffisante recommencer
  End If
End Sub



 Historique

22 avril 2005 00:06:47 :
pb.

 Sources du même auteur

Source avec Zip Source avec une capture USB : 8 ENTREES / 16 SORTIES AVEC UN PIC18F4550 (HID).
Source avec Zip Source avec une capture USB : DÉCODEUR RC5 POUR TÉLÉCOMMANDE TV,VCR... AVEC UN PIC18...
Source avec Zip Source avec une capture PORT SERIE: PROGRAMMATEUR DE MÉMOIRES I2C AVEC ÉDITEUR HEXAD...
Source avec Zip PORT SERIE / BUS I2C AVEC PCF8574A, 24C32, PCF8591 ET PCF858...
Source avec Zip PORT PARALLÈLE : CONTRÔLEZ VOTRE PC AVEC UNE TÉLÉCOMMANDE TV...

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

ASTUCE : INTERROMPRE L'ÉXECUTION D'UNE MACRO EXCEL par mabrouklepoux
Source .NET (Dotnet) ATTENDRE UN CERTAINS TEMPS (PAUSE) SANS "PERDRE LA MAIN" EN ... par hvb
ATTENDRE UN CERTAINS NOMBRE DE SECONDES/MILLISECONDES SANS "... par hvb
PAUSE DANS LE CODE: LA FONCTION SLEEP par Warning
EFFECTUER UNE PAUSE DANS LE CODE par Stephane

Commentaires et avis

Commentaire de nr le 22/04/2005 08:28:00

Très interressant, je cherchais ca depuis un bout de temps !

Merci

Commentaire de Obi le 22/04/2005 09:40:06

Ca utilise 100% du processeur ta fonction wait, nan ?
Faudrait pouvoir dire à VS que cette fonction n'à pas la priorité...

Commentaire de rylryl le 22/04/2005 12:24:21

Merci a vous!
Oui c'est un peu gourmand mais pour s'attaquer aux µS !!!
Cependant grâce a Kenavo une petite amélioration est possible la voili...

'//////////////////////////
'// Attendre N microSeconde
Private Sub DelayUS(MicroS)
    Dim Frq_Base As Currency, Time_memo As Currency, Time_now As Currency
    Dim dif As Long
        
    If QueryPerformanceFrequency(Frq_Base) Then ' Base fréquence systême
    QueryPerformanceCounter Time_memo ' Repère temps
    dif = Time_memo + Round(MicroS * Frq_Base / 1000000) ' Calcul fait une seule fois
    Do
        QueryPerformanceCounter Time_now
    Loop Until Time_now >= dif       ' Si pause pas suffisante recommencer
    End If
End Sub

a+
ryl...

Commentaire de ticomic le 22/04/2005 17:54:50

C pas sa que ca fait sleep?

(Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long))

Ou c'est autre chose?

Commentaire de ticomic le 22/04/2005 18:02:40

Et pk pas avec gettickcount?

Private Sub pausep(ByVal tempsenmilisecondes As Long)
Dim ti As Long
ti = GetTickCount

1
If GetTickCount - ti < tempsenmilisecondes Then GoTo 1
End Sub

Je sais que je parle bcp lol, mais c juste pour apprendre

Commentaire de rylryl le 22/04/2005 18:42:37

Bonjour ticomic,

"Sleep" ne gêre que les milliSecondes et d'une façon assez grossiere ainsi que "GetTickCount"...
Le code que je propose est capable de gerer les microSecondes et même au dela mais bon déja les microSecondes c'est pas mal !!!

voili...
a+
ryl...

Commentaire de jessoulabrute le 22/04/2005 23:12:45

C cool

Commentaire de draluorg le 23/04/2005 01:43:43

salut a tous,

wai mais c'est pas une pause c'est juste occuper le proco en lui faisant faires des boucles inutilement
si tu veux faire des micro pause pour ralentir un peu l'application autant faire des

for i = 1 to 10
doevents
next i
ca reviendra au meme mais en plus simple

Commentaire de jack le 23/04/2005 01:49:24 administrateur CS

Salut
Les microsecondes : faut peut-être pas trop rêver :
Combien de temps le processeur met-il pour interpreter tes instructions ?
Il y a de fortes chances pour que cela dure un peu plus longtemps qu'une microseconde.
En ce qui concerne GetTickCount : Cette horloge est précise à la milliseconde (garanti). Par contre, c'est le programme qui va attendre après une valeur particulière qui pénalisera la précision.
Vaste sujet déjà maintes fois évoqué sur le forum (des posts interminables de centaines de réponses ...)

Commentaire de rylryl le 23/04/2005 11:41:29

Bonjour draluorg,
Le fait de faire une boucle "for next" c'est bien zoli mais tu n'auras pas les mêmes temps de "pause" sur des machines différentes (vitesse pross) donc pas utilisable.

ryl...

Commentaire de rylryl le 23/04/2005 11:55:16

Salut Jack,
As tu fait quelques tests de comparaison entre mon code et GetTickCount constate tu une derive ?
J'ai utilisé ce code c'est vrai sous delphi dans un thread pour en faire ça :
http://www.delphifr.com/code.aspx?ID=30841
Je prepare la même chose pour VB comme ça ,ça fera un exemple concret !
Donc a trés bientôt !!

ryl...


Commentaire de rylryl le 23/04/2005 18:01:25

Alors Jack que donnent tes tests exactement ?
bon pas bon ?

a+
ryl...

Commentaire de mekid_6 le 28/04/2006 16:03:49

salut je suis nouveau dans le tas. Le probleme est que meme avec for et sleep on arrive pas a avoir une bonne vitesse, précisement avec for(i=0;i<3;i++) j'ai une vitesse visible a la sortie du port. je sais pas si quelqu'un a deja rencontré se probleme et peut m'apportert une solution
d'avance merci!

Commentaire de rylryl le 28/04/2006 18:15:54

Bonjour Mekid_6,

Tu utilise du C ce n'est pas le bon forum ici c'est du VB...
Regarde dans ce code il y a la même routine:
http://www.cppfrance.com/codes/PORT-PARALLELE-CONTROLEZ-MEDIAPLAYER-AVEC-TELECOMMANDE-TV-VCR_37224.aspx

Voili...
A+
ryl...

Commentaire de LOFLO le 25/09/2006 16:13:13

Je ne suis vraiment pas sur qu'en utilisant les QueryPerformanceCounter et QueryPerformanceFrequence on puisse obtenir des tempos à la micro-seconde (voir 1000 µS) .

Je suis en train de développé une application en VB qui doit récupérer des données depuis une carte analogique sur PC , J'ai essayé vos fonctions  car j'ai besoin de récuperer des données à 1000 µS (1 mS) , mon problème est que le délais de 1000 µS n'est pas toujours respecté. il arrive qu'il y ai des crêtes de 2000µS ou 3000 µS. Je pense que c'est Windows qui gère cela.

Y a t il un autre moyen pour palier à cela ?  (peut être en faisant un morceau d'assembleur)
ou un programme dans une session DOS sous Windows ?  

Salutations
Long

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

VBA - WORD [ par Blanche ] Je désire faire une pause lors de l'exécution de la macro afin de permettre à l'utilisation de faire des corrections dans le document. Donc, une paus Ah ! les services NT ! [ par RVTT ] Salut, Voila, je devellope une petite application qui permet a bernard de 'couper' ce qui risque de faire planter une gravure en cour. Il click sur un comment mettre en pause? [ par mike ] Existe-t-il une procédure qui permet de mettre en pause le programme pendant un temps donné?Par exemple si je clique sur un bouton, une image s'affich urgent pause système [ par Cyberdevil ] Hello,Je fais comment pour faire une pause dans le système,c'est à dire que tout le programme en chargement ou en exécution soit "pauser" En faite je Recherche le nom d'une fonction [ par eltaris ] Existe t-il une fonction qui mette le programmeen "pause" pendant un temps que l'on choisit ?ex : si je tape Pause(5), le programme s'arrête pendant5 Faire une pause dans un programme [ par nino208 ] Bonjour,je recherche l'écriture d'une fonction Delay (de pause dans un programme) sans faire de boucle (ça consomme de la CPU) mais en utilisant un ti Faire une pause dans un programme [ par nino208 ] Bonjour,je recherche l'écriture d'une fonction Delay (de pause dans un programme) sans faire de boucle (ça consomme de la CPU) mais en utilisant un ti faire une pause (pas en durée) [ par FleX ] ben voila c surement un trc tout con mais n'empeche ke je me prend la tete....Voila mon souci : g un prog qui fait une traitement (avec la form1)et qu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales