I did a little more development today and came up with the following solution for my problem. I'm hoping someone can tell me if it's sound.
First, I think making my VIs that control hardware reentrant is not a good idea and am currently planning to make them non-reentrant.
So, my solutions is this ....
My C++ application will talk to a "VI Menu.vi" via TCP/IP. My app will request that the VI Menu.vi open a specific VI, pass it certain parameters and then actually run the VI. The Menu VI listens for these types of requests and if it receives one it checks for current remote connections on the requested VI using an invoke node. If a remote connection is detected the connection to the associated client is closed, also using an invoke node. If a connection is not found, the VI is run as requested.
What caveats should I be considering? I'm attaching a jpg with part of my Menu VI block diagram so you can see exactly what I'm doing.
Thanks again to anyone with advice!