Sleep non bloquant

Soyez le premier à donner votre avis sur cette source.

Vue 10 102 fois - Téléchargée 1 279 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 !
Messages postés
54
Date d'inscription
jeudi 13 novembre 2003
Statut
Membre
Dernière intervention
25 avril 2012

Et utiliser un Timer, ce ne serait pas plus simple?
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
OUIN ! ça bloque aussi pour moi :'( Delphi 7 Enterprise.
Quelqu'un une autre soluce pour faire une pause, une attente sans bloquer ? =) merci
Messages postés
1
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
17 janvier 2006

Je n'ai aucun problème sous Delphi 7 et ça résoud parfaitement mon problème.

Merci
Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
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.