Attendre x secondes dans une boucle

Soyez le premier à donner votre avis sur cette source.

Vue 5 817 fois - Téléchargée 353 fois

Description

J'ai posté une source en Delphi sur delphifr, je viens de la convertir en asm... Le but est donc de pouvoir attendre X ms avant l'itération suivante dans une boucle, ceci est mon premier code asm fonctionnel, y'a peut etre pas de quoi grimper aux rideaux mais je suis content lol :)

Source / Exemple :


program SleepEx;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  i: Integer;

procedure Pause(t: DWORD); register;
asm
  push ecx
  push ebx
  mov ecx, eax
  call GetTickCount
  mov ebx, eax
@attente:
  push ebx
  push ecx
  push 1
  call Sleep
  pop ecx
  pop ebx
  call GetTickCount
  sub eax, ebx
  cmp eax, ecx
  jnae @attente
  pop ebx
  pop ecx
end;

begin
  for i := 0 to 9 do begin
    writeln('i=', i);
    Pause(1000);
  end;
end.

Conclusion :


Le sleep sert à "rendre la main", s'il existe une fonction dédiée (comme pthread_yield), je ne la connais pas... N'hésitez pas à me donner l'API adéquate, si vous la connaissez ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
104
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
31 décembre 2006

Pourriez vous donner une exemple, par exemple une boucle qui attends 5 sc merci.
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Et voila la version non bloquante...
L'appel de Sleep sert juste à rendre la main à l'ordonnanceur, si quelqu'un connait la fonction exacte permettant de faire cela (un peu comme pthread_yield), je suis intéressé ;)
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ben dans le code en Delphi, j'ai un Application.ProcessMessages, ce qui me permet de ne pas bloquer l'appli pendant le Sleep...

Par contre dans la fonction asm, c'est vrai qu'il n'y a pas de différence, c'est juste que je voulais essayer de recoder cette petite procédure en asm pour voir si j'y arrivais, rien de plus, faut bien commencer quelque part :p
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Pourquoi ne pas utiliser tout simplement la fonction Sleep(DWORD dwMilliseconds) de l'API ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.