Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中并行化输入和显示?

我在MATLAB中使用Psychtoolbox来运行行为心理学范例。作为范例的一部分,用户必须查看视觉刺激并使用某种输入机制对其做出响应。对于键盘,其工作方式如下:
  1. 显示刺激
  2. 轮询键盘以获取响应
    1. 如果未检测到响应,则循环回到1
    2. 如果检测到响应,请中断并继续执行脚本
这对于键盘来说效果很好,因为步骤2需要1-2毫秒。当我使用备用输入机制时,问题就来了。在这种情况下,步骤2大约需要20毫秒。 (我需要这个替代输入来运行研究,应该认为这是不可变的事实。)由于刺激在很短的时间间隔内发生变化,因此增加的延迟会中断任务。

我当前的想法是尝试使用并行处理,以便一个线程显示刺激,而另一个线程轮询键盘。我目前正在使用“ 并行计算工具箱”来执行此操作。我遇到的问题是我不知道如何将键盘输入定向到“并行”线程。 有谁知道(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 我能够使用一些简单的绘图例程成功运行上述函数,并使用简单的pause语句和返回值替换get_input的代码。我不确定KbCheck是否可以在线程中运行,但是希望您能够适应您的需求。

下面是在上面的代码中使用的并行计算工具箱功能的文档: createJobcreateTasksubmitwaitForStatedestroy



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:06


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.