No transfer in progress problem? I have seen this problem in my multi-threaded test sequencer program (since i could not afford to buy NI TestStand program, therefore, i built my own sequencer program specifically for my testing purpose...)
In reality, OS just blinds ur feeling about all running processes/threads will run at the same time while apparently they are time-shared so close that we don't notice it that much.
My sequencer would access MIO card which will turn on and off some switches on my test bench and at the same time will acquire analog voltage measurements from it. In my program, i would be able to create several tests that can run in parallel or sequential. I use Traditional NI-DAQ functions although simultaneous multi-threaded friendly niDAQmx functions are available in Labwindows/CVI 7.1. I implemented parallel ability by using ThreadPool and ThreadQueue support to invoke a thread for every test i initiated. Definitely when using Traditional DAQ AI support, i used the TaskID (ConfigureTask) version.
When I use TaskID version, I need to make sure that I immediately destroy the TaskID related to a test before calling another test with the same TaskID (I just keep using the same TaskID many times to save memory use). We can't call the same TaskID while it is still being used, otherwise, NI function will give error "No transfer in progress" for that test which attempts to use a running TaskID. Remember, there is no such thing as parallel execution in an OS environment that does not support parallel computing (like in general-purpose Windows OS): everything is time-shared in program context.
So my advice is to check your code for possibility of forgetting to destroy a TaskID when we want to use it again in a quick small amout of time. Forgettting to destroy TaskID in subsequent steps will deny access to hardware for other running analog I/O processes/threads that share the same TaskID.