Naja, wenn du bloss alle 10 msec Fragst ob was passiert ist, dann wäre eine andere Möglichkeit die Gegenstellen (dort wo du nachfragst) so umzubasteln dass du dort einen Funktion hast, die du aufrufen kannst, und die erst zurückkommt wenn was passiert ist -- bzw. ein schon früher "passiertes" Ereignis gepuffert ist welches noch nicht abgeholt wurde. Das nennt man "blocking". USB unter Windows unterstützt blocking IO, von daher dachte ich mir das würde wohl die einfachste Möglichkeit sein.
Eine andere Möglichkeit wäre dass du von der Gegenstelle einen EVENT gesetzt bekommst wenn was passiert ist, oder, alternativ, der Gegenstelle eine Callback-Funktion angeben kannst, die eben immer dann aufgerufen wird.
Wenn dies alles nicht möglich ist, dann ist es u.U. OK ein Sleep(10) zu verwenden. Ich habe schon Code geschrieben wo alle 4 msec etwas gepollt wird *duck*. Merkt man aber so-gut-wie nix davon dass das läuft. Wenn davon 10 Instanzen laufen würden wäre es schlecht. Läuft aber nur eine, und wird immer nur eine sein, von daher ist es entschuldbar. Polling ist IMHO unter gewissen Umständen eine sehr gute Lösung, vor allem weils einfach und "deppensicher" ist.
Also. Wenns einfach geht: umbasteln, wenn nicht: Sleep(10) lassen.