![]() |
如何在MATLAB中并行化输入和显示?
我在MATLAB中使用[URL="http://psychtoolbox.org/wikka.php?wakka=HomePage"]Psychtoolbox[/URL]来运行行为心理学范例。作为范例的一部分,用户必须查看视觉刺激并使用某种输入机制对其做出响应。对于键盘,其工作方式如下:
[LIST=1][*]显示刺激[*]轮询键盘以获取响应[LIST=1][*]如果未检测到响应,则循环回到1[*]如果检测到响应,请中断并继续执行脚本[/LIST][/LIST]这对于键盘来说效果很好,因为步骤2需要1-2毫秒。当我使用备用输入机制时,问题就来了。在这种情况下,步骤2大约需要20毫秒。 (我需要这个替代输入来运行研究,应该认为这是不可变的事实。)由于刺激在很短的时间间隔内发生变化,因此增加的延迟会中断任务。 我当前的想法是尝试使用并行处理,以便一个线程显示刺激,而另一个线程轮询键盘。我目前正在使用“ [URL="http://www.mathworks.com/products/parallel-computing/"]并行计算工具箱”[/URL]来执行此操作。我遇到的问题是我不知道如何将键盘输入定向到“并行”线程。 [B]有谁知道(1)是否可以将键盘输入定向到线程/是否有线程将视觉信号发送到监视器,如果是,(2)怎么做?[/B] 另外,如果有人对如何解决此问题有更好的想法,我将不知所措。 [B]回答:[/B] 根据[URL="http://www.mathworks.com/matlabcentral/newsreader/view_thread/294212"]这个MATLAB新闻组线程[/URL] ,看来线程不能修改图形对象。只有桌面MATLAB客户端可以做到这一点。这意味着您无法处理线程中的图形更新,并且在尝试时可以确认这一点,并且无法修改线程中的图形甚至[URL="http://www.mathworks.com/help/techdoc/ref/rootobject.html"]根对象[/URL] 。 但是,我认为当线程处理输入的轮询时,您也许可以在MATLAB中进行主要图形的更新。这是一个示例函数,用于连续更新显示,直到等待来自[URL="http://docs.psychtoolbox.org/KbCheck"]KbCheck[/URL]输入的线程运行完毕: 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 我能够使用一些简单的绘图例程成功运行上述函数,并使用简单的[URL="http://www.mathworks.com/help/techdoc/ref/pause.html"]pause[/URL]语句和返回值替换get_input的代码。我不确定KbCheck是否可以在线程中运行,但是希望您能够适应您的需求。 下面是在上面的代码中使用的并行计算工具箱功能的文档: [URL="http://www.mathworks.com/help/toolbox/distcomp/createjob.html"]createJob[/URL] , [URL="http://www.mathworks.com/help/toolbox/distcomp/createtask.html"]createTask[/URL] , [URL="http://www.mathworks.com/help/toolbox/distcomp/submit.html"]submit[/URL] , [URL="http://www.mathworks.com/help/toolbox/distcomp/waitforstate.html"]waitForState[/URL] , [URL="http://www.mathworks.com/help/toolbox/distcomp/destroy.html"]destroy[/URL] 。 [url=https://stackoverflow.com/questions/4410339]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 01:07。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.