Your problem (at least in this example) is that the global variable is only being written to immediately coming into the loop. The loop is then dominated by the subVI. Therefore the global to exit the subVI will never be written to again. The following recommendation is only for GUI stop commands, but it might lead to other ideas for your specific situation. Use another loop with an Event Structure in it. Set an event to "Stop" value changing and then write the new value to the global variable. This will then end the subVI. As long as you don't have a Timeout event case, the event structure uses no cpu cycles until a registered event happens, so performance issues are nonexistant. My edited code for the top level VI is attached.