In un'applicazione di test del client di messaggistica, il thread del produttore deve essere limitato per evitare l'inondazione del server.Sospendere un thread per meno di un millisecondo
Poiché le velocità di trasferimento sono di circa 25.000 messaggi al secondo (40 microsecondi per messaggio), il ritardo causato da Sleep (1) sarebbe troppo lungo.
How to make thread sleep less than a millisecond on Windows contiene alcune informazioni relative all'API di Windows. C'è uno snippet di codice, una classe o una libreria per Delphi?
seguente risposta Bens ho scoperto che il sonno con diversi valori sotto 15 fornisce anche tassi differenti di trasferimento (Windows Vista):
sonno (1), dopo ogni 20 messaggi:
00:02 tx/rx 25740/3705 12831/1846 msgs/sec (77/541 microsecs/msg)
00:04 tx/rx 53101/7405 13255/1848 msgs/sec (75/541 microsecs/msg)
00:06 tx/rx 79640/11288 13260/1879 msgs/sec (75/532 microsecs/msg)
00:08 tx/rx 104520/14562 13055/1818 msgs/sec (76/550 microsecs/msg)
00:10 tx/rx 130760/18829 13066/1881 msgs/sec (76/531 microsecs/msg)
sonno (5) dopo ogni 20 messaggi:
00:02 tx/rx 7640/3622 3812/1807 msgs/sec (262/553 microsecs/msg)
00:04 tx/rx 14660/10794 3661/2695 msgs/sec (273/371 microsecs/msg)
00:06 tx/rx 21480/18171 3577/3026 msgs/sec (279/330 microsecs/msg)
00:08 tx/rx 28140/25642 3515/3203 msgs/sec (284/312 microsecs/msg)
00:10 tx/rx 34980/32692 3496/3267 msgs/sec (286/306 microsecs/msg)
Questo è stato inaspettato dopo aver letto il commento ab il limite inferiore per occupato in attesa
E i valori senza strozzare
00:02 tx/rx 44065/494 21988/246 msgs/sec (45/4065 microsecs/msg)
00:04 tx/rx 90493/756 22595/188 msgs/sec (44/5319 microsecs/msg)
00:06 tx/rx 142982/907 23810/151 msgs/sec (41/6622 microsecs/msg)
00:08 tx/rx 192562/1144 24055/142 msgs/sec (41/7042 microsecs/msg)
00:10 tx/rx 237294/1395 23717/139 msgs/sec (42/7194 microsecs/msg)
è possibile implementare solo occupato in attesa per meno di 1 ms, not Sleep. – kludg
@Serg, AFAIK circa 15 ms – OnTheFly