Although you can typically execute steps in substantially less than a millisecond, Windows is not a real-time OS. Any program you write can be suspended for unpredictable durations at unpredictable times. Thus you might usually be able to monitor at a certain rate, but occasionally, you'll get a performance hiccup. You can use the Step Insert Menu>>Synchronization>>Advanced>>Thread Priority step type to raise the priority of your critical thread. You can also kill unneeded programs and services. Both will improve your chances of maintaining a constant throughput and it is possible that you might empirically determine that you can get "reliable enough" timing for your application. However, if you want a guarantee, you'll need to either perform your operation in hardware, or use a real-time OS.