Sleep non bloquant

5/5 (15 avis)

Vue 10 274 fois - Téléchargée 1 298 fois

Description

Tous ceux qui ont utilisés Sleep dans une application VCL savent que l'application se retrouve irrémédiablement bloquée durant toute la durée du Sleep... J'ignore s'il existait déjà des fonctions permettant d'éviter ce problème, mais voici une fonction permettant d'éviter ce désagrément :

Source / Exemple :


procedure Pause(t: DWORD); register;
asm
  push ecx
  push ebx
  mov ecx, eax
  call GetTickCount
  mov ebx, eax
@attente:
  push ebx
  push ecx
  mov eax, Application
  call [EAX].TApplication.ProcessMessages
  push 1
  call Sleep
  pop ecx
  pop ebx
  call GetTickCount
  sub eax, ebx
  cmp eax, ecx
  jnae @attente
  pop ebx
  pop ecx
end;

Conclusion :


J'ai essayé de l'optimiser au maximum, mais si on peut mieux faire, n'hésitez pas à laisser un message ! De plus, cette fonction devrait être assez universelle, et fonctionne sur Delphi 5 et ultérieurs.

Le sleep dans la boucle ne sert qu'à rendre la main à Windows, s'il existe une fonction comme pthread_yield sous Windows, je ne la connais pas mais il serait préférable de l'utiliser, je pense.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
La ligne "call [EAX].TApplication.ProcessMessages" est fausse. Le compilateur s'arrête dessus avec une énorme erreur !

Il faut vérifier ce que vous publiez avant de la faire parce que dans le cas contraire c'est ridicule !
manu1506 Messages postés 54 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 25 avril 2012
20 juin 2007 à 15:40
Et utiliser un Timer, ce ne serait pas plus simple?
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
26 janv. 2007 à 17:04
OUIN ! ça bloque aussi pour moi :'( Delphi 7 Enterprise.
Quelqu'un une autre soluce pour faire une pause, une attente sans bloquer ? =) merci
LeGrizz Messages postés 1 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 17 janvier 2006
17 janv. 2006 à 17:36
Je n'ai aucun problème sous Delphi 7 et ça résoud parfaitement mon problème.

Merci
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
30 oct. 2005 à 23:11
Delphi 7 et moi ca me bloque tout, ^^

pas grave mais merci ;)
Afficher les 15 commentaires

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.