是否可以使MATLAB可轮询数据队列后进先出(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
呼叫";轮询(q(";按照添加到队列(FIFO(的顺序,逐个返回添加到x0的值。相反,我想检索队列中调用poll(q(的时刻的最后一个值。
例如,由于下面的代码在对"0"的连续调用之间等待0.25秒;poll(q(";,并且由于值每0.01秒被加到x0上;轮询(q(";则x0的第25个值应该已经被记录。然而,第二次我叫";轮询(q(";我只得到第一个条目(FIFO而不是LIFO(。
您可以在for循环中使用while循环来使队列为空:
for jj = 1:4
while q.QueueLength > 0
x0 = poll(q);
end
x0
pause(0.25)
end