Yes Globals are bad, and I only suggested them as a method of getting a sloppy version functional, with globals and multithreads, race conditions can occur and are a real pain to debug. To use message passing between threads is simple, create 2 loops, and pass the result of an "obtain queue" to both loops. now we have a reference to a common synchronization object which will allow us to communicate between threads. This is a simple consumer producer model, one thread will enqueue data (each quque is created with a specific data type, any labview data types including custom clusters) and the other thread can wait on the queue usind dequeue and an infinite or set timout or even periodically check the queue to see if it has any elements in it. I have attached a simple example. I hav not had to send data bi dirrectional in labview, this case is harder than the producer consumer model. I have included a LV 7.0 simple example of passing strings between threads. You can change that rate (period in ms) of the read write and timouts to see how it affects the queue.
-Paul