MATLAB中如何后台运行定时任务保障心理物理学实验时序
心理物理学实验MATLAB时序与后台响应追踪问题
我在MATLAB中开展一项心理物理学实验,刺激呈现的时序要求极为严格。已编写代码生成由1、2、3组成的序列,每个数字对应触发不同刺激的展示。当刺激2出现时,被试需在1秒内通过ResponsePixx按钮盒做出按键响应。
要求每个刺激需在前一个刺激呈现0.5秒后展示,这意味着刺激2的响应时段会与后续刺激的展示时段重叠。因此需要在后台追踪按键响应的同时,继续执行刺激序列的展示。
核心问题代码
% 创建数字序列 sequence = % 生成1×N的1、2、3序列的函数输出 for iSequence = 1:length(sequence) disp(sequence(iSequence)) % 替代实际刺激展示的占位代码 if sequence(iSequence) == 2 % 需要在等待1秒的同时继续序列展示 % 这段时间内要运行追踪被试响应的代码 disp("时间已过") end pause(0.5) end
尝试过的parfeval方案(未成功)
试过用parfeval但没达到预期——输出显示正常,但会打乱主序列的展示时序(推测是从并行池获取输出时产生延迟,我对并行处理经验有限):
delete(gcp('nocreate')) clear background = parpool(1); sequence = % createTrialSequence生成序列 for iSequence = 1:length(sequence) disp(sequence(iSequence)) if iSequence > 1 if sequence(iSequence - 1) == 2 fetchOutputs(evalButton) end end if sequence(iSequence) == 2 evalButton = parfeval(background, @trackInBackground, 1); end pause(0.5) end
尝试过的事件监听器方案(未成功)
还试过事件与监听器,但同样会暂停序列展示(我对其原理不太熟悉,可能遗漏了关键细节):
clear event = targetAppeared; listener = trackTargetAppearance(event); sequence = %createTrialSequence生成序列 for iSequence = 1:length(sequence) disp(sequence(iSequence)) if sequence(iSequence) == 2 event.isTarget end pause(0.5) end classdef targetAppeared < handle events targetEvent end methods function isTarget(obj) notify(obj, 'targetEvent') end end end classdef trackTargetAppearance < handle methods function obj = trackTargetAppearance(targetObj) addlistener(targetObj, 'targetEvent', @trackTargetAppearance.handleEvent) end end methods (Static) function handleEvent(~, ~) startTime = GetSecs; % 获取系统时间,来自PsychToolBox while GetSecs < (startTime + 1) continue end disp("目标响应窗口已结束") end end end
内容的提问来源于stack exchange,提问作者jakedoescodesometimes
相关产品推荐
相关产品推荐

