Hello cdreike,
Have you monitored the CPU usage under the Windows Task Manager? Is the CPU usage ever approaching 100%?
Make sure you are creating and configuring your tasks before the timed loop, clearing them after the timed loop, and only doing the reads within the timed loop. This way the tasks are only created once at the beginning of your program, and the overhead associated with creating and configuring the task is minimized. Maybe you could post your code and we could make some suggestions.
If you are using the DAQmx Sample Clock VI or have your task configured for finite or continuous acquisition (as opposed to On Demand), you are doing hardware timed acquisition. If you have two DAQmx Read VIs in your timed loop, one for each device, the loop will not go on to the next iteration until each DAQmx Read has executed. If you have one task that is acquiring a single data point every 100ms and another task that is acquiring a single data point every 1000ms, and you are reading a single data point from both tasks every iteration of the timed loop, the second DAQmx Read will take up to 1000ms before a data point is available to read, and your loop will only execute every 1000ms. Take a look at the error clusters passed around inside your Timed Loop and see if the loop is finishing late at all.
I hope this helps and let us know if you have any further questions,
Travis G.
Applications Engineering
National Instruments
www.ni.com/support