Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在MATLAB中使用Psychtoolbox来运行行为心理学范例。作为范例的一部分,用户必须查看视觉刺激并使用某种输入机制对其做出响应。对于键盘,其工作方式如下:
我当前的想法是尝试使用并行处理,以便一个线程显示刺激,而另一个线程轮询键盘。我目前正在使用“ 并行计算工具箱”来执行此操作。我遇到的问题是我不知道如何将键盘输入定向到“并行”线程。 有谁知道(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是否可以在线程中运行,但是希望您能够适应您的需求。 下面是在上面的代码中使用的并行计算工具箱功能的文档: createJob , createTask , submit , waitForState , destroy 。 更多&回答... |
![]() |
![]() |