MATLAB:如何运行函数直到释放键?
MATLAB: How to run function until the key is released?
我有一个 GUI,我想重复从按下给定键到释放键的一些过程。
我知道如何在按键按下时进行一次处理。但是有什么办法可以在释放密钥之前每秒显示随机数吗?
感谢您的回答。
贾贾
您可以在模型上附加一个计时器,用 KeyPressFcn
启动它,用 KeyReleaseFcn
停止它。
下面的例子会创建一个图形,只要按下 f 键,就会在控制台显示一个随机数。
function h=keypressdemo
h.fig = figure ;
%// set up the timer
h.t = timer ;
h.t.Period = 1 ;
h.t.ExecutionMode = 'fixedRate' ;
h.t.TimerFcn = @timer_calback ;
%// set up the Key functions
set( h.fig , 'keyPressFcn' , @keyPressFcn_calback ) ;
set( h.fig , 'keyReleaseFcn' , @keyReleaseFcn_calback ) ;
guidata( h.fig ,h)
function timer_calback(~,~)
disp( rand(1) )
function keyPressFcn_calback(hobj,evt)
if strcmp(evt.Key,'f')
h = guidata(hobj) ;
%// necessary to check if the timer is already running
%// otherwise the automatic key repetition tries to start
%// the timer multiple time, which produces an error
if strcmp(h.t.Running,'off')
start(h.t)
end
end
function keyReleaseFcn_calback(hobj,evt)
if strcmp(evt.Key,'f')
h = guidata(hobj) ;
stop(h.t)
end
这是一个简单的计时器模式,回调函数花费的时间比间隔时间少很多,所以这里没有问题。如果您希望任何函数在完成后立即重新执行(一种无限循环),您可以通过更改计时器的 executionmode
来设置它(阅读 timer
文档以获取示例。
但是,请注意,如果您的回调永久执行并消耗所有 (matlab unique) 线程资源,您的 GUI 可能会变得响应速度较慢。
我有一个 GUI,我想重复从按下给定键到释放键的一些过程。
我知道如何在按键按下时进行一次处理。但是有什么办法可以在释放密钥之前每秒显示随机数吗?
感谢您的回答。 贾贾
您可以在模型上附加一个计时器,用 KeyPressFcn
启动它,用 KeyReleaseFcn
停止它。
下面的例子会创建一个图形,只要按下 f 键,就会在控制台显示一个随机数。
function h=keypressdemo
h.fig = figure ;
%// set up the timer
h.t = timer ;
h.t.Period = 1 ;
h.t.ExecutionMode = 'fixedRate' ;
h.t.TimerFcn = @timer_calback ;
%// set up the Key functions
set( h.fig , 'keyPressFcn' , @keyPressFcn_calback ) ;
set( h.fig , 'keyReleaseFcn' , @keyReleaseFcn_calback ) ;
guidata( h.fig ,h)
function timer_calback(~,~)
disp( rand(1) )
function keyPressFcn_calback(hobj,evt)
if strcmp(evt.Key,'f')
h = guidata(hobj) ;
%// necessary to check if the timer is already running
%// otherwise the automatic key repetition tries to start
%// the timer multiple time, which produces an error
if strcmp(h.t.Running,'off')
start(h.t)
end
end
function keyReleaseFcn_calback(hobj,evt)
if strcmp(evt.Key,'f')
h = guidata(hobj) ;
stop(h.t)
end
这是一个简单的计时器模式,回调函数花费的时间比间隔时间少很多,所以这里没有问题。如果您希望任何函数在完成后立即重新执行(一种无限循环),您可以通过更改计时器的 executionmode
来设置它(阅读 timer
文档以获取示例。
但是,请注意,如果您的回调永久执行并消耗所有 (matlab unique) 线程资源,您的 GUI 可能会变得响应速度较慢。