eyk*_*nal 7 parallel-processing matlab psychtoolbox
我在MATLAB中使用Psychtoolbox来运行行为心理学范例.作为范例的一部分,用户必须查看视觉刺激并使用某种输入机制对其进行响应.对于键盘,其工作原理如下:
这适用于键盘,因为步骤2需要1-2毫秒.当我使用备用输入机制时会出现问题; 在这种情况下,步骤2需要约20毫秒.(我需要这个替代输入来运行研究,这应该被认为是不可改变的事实.)随着刺激在很短的时间内发生变化,这种增加的延迟打破了任务.
我目前的想法是尝试使用并行处理,这样一个线程显示刺激,另一个线程轮询键盘.我目前正在使用Parallel Computing Toolbox来执行此操作.我遇到的问题是我不知道如何将键盘输入定向到"并行"线程.有没有人知道(1)是否可以将键盘输入定向到线程/让线程向监视器发送视觉信号,如果是,(2)如何做?
此外,如果有人对如何解决这个问题有任何更好的想法,我会全力以赴.
根据此 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
Run Code Online (Sandbox Code Playgroud)
我能够使用一些简单的绘图例程成功运行上述函数,并get_input用简单的暂停语句和返回值替换代码。我不确定是否KbCheck可以在线程中工作,但希望您能够根据您的需要进行调整。
以下是上述代码中使用的并行计算工具箱函数的文档:createJob, createTask, submit, waitForState, destroy。