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.
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.