I don't see what's wrong with just looping some maximum number of times and then stopping. It limits the actual amount of computation to a fixed amount. This will correspond to a different amount of time on different systems, but does it matter?
If you need to abandon processing until some event occurs, I do not see how you can avoid a call to WaitForSingleObject() or similar. It entails overhead, but what other choice do you have?