Согласно этой ветке группы новостей MATLAB , кажется, что потоки не могут изменять графические объекты. Только настольный клиент MATLAB может сделать это. Это означает, что вы не можете обрабатывать обновление графики из потока, и я могу подтвердить это, когда попробовал это сделать и не смог изменить рисунки или даже корневой объект из потока.
Тем не менее, я думаю, что вы можете выполнить обновление основной графики в MATLAB, пока поток обрабатывает ваш ввод. Вот пример функции для постоянного обновления отображения, пока поток, ожидающий ввода от KbCheck
, не завершит свою работу:
function varargout = plot_until_input
obj = createJob(); %# Create a job
task = createTask(obj,@get_input,4,{deviceNumber}); %# Create a task
submit(obj); %# Submit the job
waitForState(task,'running'); %# Wait for the task to start running
%# Initialize your stimulus display here
while ~strcmp(get(task,'State'),'finished') %# Loop while the task is running
%# Update your stimulus display here
end
varargout = get(task,'OutputArguments'); %# Get the outputs from the task
destroy(obj); %# Remove the job from memory
%#---Nested functions below---
function [keyIsDown,secs,keyCode,deltaSecs] = get_input(deviceNumber)
keyIsDown = false;
while ~keyIsDown %# Keep looping until a key is pressed
[keyIsDown,secs,keyCode,deltaSecs] = KbCheck(deviceNumber);
end
end
end
Мне удалось успешно запустить вышеуказанную функцию с некоторыми простыми процедурами построения графиков и заменить код в get_input
на простой оператор pause и возвращаемое значение. Я не уверен, будет ли KbCheck
работать в потоке, но, надеюсь, вы сможете адаптировать его для своих нужд.
Вот документация для функций Parallel Computing Toolbox, используемых в приведенном выше коде: createJob
, createTask
, submit
, waitForState
, destroy
.