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 (boolean)
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.