You're probably tired of hearing me say this, but the global function idea is the best.
A global variable makes a COPY of the data each time you read it. That takes time, and memory. If each of 3 window reads the global, and picks out a channel, then you've made 3 copies of the original data. Depending on your data size, that may or may not be a problem.
A queue means that once you read the data, it's lost from the queue. If window A reads from the queue, that data chunk is not in the queue any longer, so Window B can't read that same data.
If the main window generates the data and deposits it in a global function, then each window can ask the global function for a specific channel to display.
DATA STORAGE.vi:
Inputs:
WRITE/read (bool
ean)
DATA IN (2-D array of DBL, for example)
Channel Index (I32)
Outputs:
DATA OUT: 1-D array of DBL (or waveform, maybe).
Code:
WHILE
If WRITE/read
Store DATA IN in a shift reg.
else
Pass Shift reg IN to Shift reg Out.
Pick out channel via CHANNEL INDEX
Pass selected data to DATA OUT.
Loop NEVER.
The purpose of the loop is just to have a shift reg. It doesn't really loop - it executes once per call.