Pour occuper le processeur il y a toujours la méthode bestiale : crééer une ou plusieurs boucles imbriquées dont le temps d'exécution dépendra d'une part du nombre de fois que la boucle sera exécutée et du temps d'exécution d'une boucle élémentaire. Pour connaitre ce temps il te faut bien connaitre ton microprocesseur avec fréquence horloge et nombre de cycles horloge pour chacune des instructions.
Dans le principe ce n'est pas bien compliqué mais un peu fastidieux.
Autre désavantage: le code ne sera pas du tout portable. Les délais risquent de varier énormément d'un PC à un autre. Tu pourras toujours corriger en introduisant la fréquence horloge du micro mais selon le microprocesseur la même instruction peut être exécutée avec un nombre de cycles horloge différent.
Si tu ne part plus de rien, tu pourras peut être bénéficier de timers (interruptions dos par exemple).
Tout d'abord, la solution de faire une boucle précalculée en cycles d'horloge est peu envisageable. Car avec les processeurs modernes (Pentium, Athlon ...), le cache et la parallélisation des instructions dans les pipelines d'exécution, rendent trés difficile l'estimation exacte en terme de cycles d'horloge. Seule une méthode empirique par essais successifs peut permettre de s'en sortir.
Ensuite, cette méthode de boucle ne peut être valide que si on invalide toute interruption, car on a de forte chance d'être préempté par le scheduler de tâches (que ce soit sous windows ou linux) pendant la boucle et donc fausser notre timing. Mais le fait d'invalider les IT pendant notre 'sleep' va geler notre OS.
Puis il y a la solution de l'interruption du timer qui semble plus élégant. Mais sans passer par l'OS, c'est à dire en utilisant le timer hardware, on va interferer avec les interruptions périodiques du timer servant à l'ordonnanceur de tâches (scheduler) de l'OS. On ne peut donc pas vraiment considerer cette solution comme envisageable sauf si on accepte de 'geler' le système pendant notre chrono.
Pour terminer, reste la solution qui consiste à 'endormir notre tâche jusqu'à la prochaine periode de l'ordonnanceur de tâche. Mais on devient alors, trés lié à l'OS puisqu'on utilise la gestion du multitâche pour rescheduler notre process.
Je ne pense pas qu'il y ait de solution vraiment simple .... sauf à réaliser l'opération sur microcontrolleur type PIC16Cxx et sans OS et seul au monde .