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.