MATLAB:如何运行函数直到释放键



我有一个GUI,我想从按下给定的键到松开键重复一些过程。

我知道如何在按键时一次性完成一些过程。但是有没有办法,例如,在释放钥匙之前,每秒显示一个随机数?

谢谢你的回答。Jaja

您可以在图形上附加一个计时器,用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唯一(线程资源,则GUI的响应可能会降低。

相关内容

  • 没有找到相关文章

最新更新