延迟功能在循环时减速

时间:2017-11-19 04:00:25

标签: matlab function pause

我是MATLAB的新手,我有一个问题要问。我目前正在使用此UI,其中包含如下所示的代码。

% --- Executes on button press in Start.
function Start_Callback(hObject, eventdata, handles)  
% hObject    handle to Start (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global s brightness a t;
t = 0.1
a = 1;
readasync(s);
while (a == 1) 
  brightness = str2double(fscanf(s, '%s', 8));
  set(handles.brightness, 'String', num2str(brightness));
  disp(brightness);
 if brightness < 87
    if brightness < 44
       fprintf(s, '%s',1);
    else
       fprintf(s,'%s',2);
    end
 else
    if brightness < 130
       fprintf(s, '%s',3);
    else
       fprintf(s, '%s',4);
    end
 end
 if(a==0)
     break;
 end  
   pause(1/10);
end

如您所见,我目前正在使用暂停功能来延迟while循环。然而,我在大学的导师建议我使用tic toc而不是暂停来延迟循环。我不知道该怎么办呢。他给了我这个功能,但我不知道如何实现它。有什么建议吗?

function delay(t)
tic;
while toc < t
end
end

2 个答案:

答案 0 :(得分:1)

如果您有pause(1/10),请改写delay(1/10)。它们并不完全相同,因为pause具有刷新可能排队的任何图形更新和GUI回调的副作用。

答案 1 :(得分:0)

正如excaza所示,您可以用pause(1/10);替换行delay(1/10);,但函数delay必须对其被调用的位置可见(例如,您可以在名为delay.m的同一目录,其中包含您导师的代码。)

指出用pause(1/10);替换代码tic; while toc < 1/10 end;在功能上完成同样的事情可能会有所帮助,即使从编码实践/可读性的角度来看这并不是很好。< / p>