Mmm...non è proprio la stessa cosa.

La funzione che hai scritto tu è una funzione che serve a generare del ritardo, ed è ben diverso dalla funzione Sleep che, oltre a al ritardo, svolge anche altre funzioni importanti.

La cosa importante di cui tenere conto nei thread non è generare del ritardo eseguendo operazioni di diverso tipo tra un ciclo e il successivo, bensì ricordarsi di cedere la CPU ad altri thread concorrenti di tanto in tanto.

Non ho provato il codice che hai postato, ma sono quasi sicuro che, inserito all'interno di un thread, manterrebbe comunque la CPU al 100%, poichè al suo interno esegue effettivamente delle istruzioni, mentre lo scopo è quello di non eseguirne (e quindi di non impegnare la CPU), ma di lasciare che siano altri thread ad usufruire del proprio time slice di tempo per elaborare istruzioni.

La funzione Sleep fa parte dell'API di Windows e svolge il proprio compito anche quando viene richiamata specificando un ritardo pari a 0 (zero) millisecondi. Richiamata in questo modo, segnala a Windows che può passare ad eseguire altri thread prima di ritornare a quello in questione, senza aggiungere ulteriori ritardi all'operazione (poichè il tempo passato come parametro equivale a zero).

Per vedere bene il fattore occupazionale della CPU, sarebbe l'ideale utilizzare Windows NT, 2000 o XP e verificare la percentuale di lavoro attraverso il Task Manager.

Ciao!