是否可以使 MATLAB PollableDataQueue 后進先出 (LIFO) 而不是先進先出 (FIFO)?或者,有沒有辦法獲取佇列中的最后一個條目而不是第一個條目?
例如,請參閱以下說明 PollableDataQueue 的當前行為的代碼:
%parpool;
q = parallel.pool.PollableDataQueue;
f = parfeval(@test,1,q);
for jj = 1:4
poll(q)
pause(0.25)
end
fetchOutputs(f)
function x0 = test(q)
x0 = [];
for jj = 1:20
x0 = [x0, rand(1)];
send(q, x0);
pause(0.01);
end
end
ans =
[]
ans =
0.7918
ans =
0.7918 0.1528
ans =
0.7918 0.1528 0.0854
ans =
Columns 1 through 12
0.7918 0.1528 0.0854 0.9955 0.3557 0.1679 0.6713 0.5398 0.6599 0.9344 0.7200 0.4450
Columns 13 through 20
0.6622 0.4427 0.9791 0.5114 0.0200 0.6054 0.0479 0.3470
呼叫 "poll(q)" 回傳添加到 x0 的值,按照它們添加到佇列 (FIFO) 的順序。相反,我想在呼叫 poll(q) 的那一刻檢索佇列中的最后一個值。
例如,由于下面的代碼在連續呼叫“poll(q)”之間等待 0.25 秒,并且由于每 0.01 秒將值添加到 x0,我懷疑到第二次呼叫“poll(q)”時,應該已經記錄了 x0 的第 25 個值。然而,第二次我呼叫“poll(q)”時,我只得到了第一個條目(FIFO 而不是 LIFO)。
uj5u.com熱心網友回復:
您可以在 for 回圈中使用 while 回圈來使佇列為空:
for jj = 1:4
while q.QueueLength > 0
x0 = poll(q);
end
x0
pause(0.25)
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397914.html
上一篇:線圖-Matlab
