If your just collecting data, then you only need to collect data often
enough to avoid overflowing the buffer (and the buffer size should only
be limited by your memory, so you could have buffers several minutes
long). And if windows doesn't respond to a request within a couple
minutes you probably have some other far more serious problem. In my
project I have a 10 second buffer that's never overflowed (it'd be
bigger but in my case the buffer memory isn't in the computer).
But Windows offers no guaranties on latency, and neither does any other
typical Desktop OS (Well Linux just added some kernel support a couple
days ago, but that's not going to help you). That's what real time OSes
are for, but if your just collecting data a RTOS is probably complete
overkill.
Unless you fool around with priorities (or have a messed up system),
windows wont crash from 1 ms delays because it will just delay you
longer if it needs to (and likely will do that quite often at 1 ms).
If you want to avoid latency. Do your data acquisition (or other time
critical work) in a separate loop from the rest of your code, and if
possible run on a multicore system (these will help a lot).
Short Answer: Use a buffer and make sure it's big enough.