丢弃连续调用输入之间的键盘事件 (MATLAB)

Discarding keyboard events between consecutive calls to input (MATLAB)

我的代码包含以下重复模式:

  1. 要求用户按 开始计算(使用 input)。
  2. 执行一些冗长的计算并向用户显示一些信息。
  3. 等待用户再次按下 以进行进一步的计算。

我面临的问题: 如果用户在 1st 出现提示(可能是错误的),这些按键被以下提示拦截,导致其余代码执行。

期望的行为:我想丢弃在接受 a 提示之后和下面一个的出现,这样计算就不会在没有明确的用户与 each 提示交互的情况下进行。


重现问题的代码:

function q34593155()
%% // Init  
  clc;
  import java.awt.Robot; import java.awt.event.*; robot = Robot;
%% // 1st prompt:
  disp('--- Some initial info the user should see ---');
  [~] = input('\nPress "Return" to start phase 1.\n','s');
  disp('Please wait while computation is running...');
  %// Here we simulate an additional press:
  robot.keyPress(KeyEvent.VK_ENTER);
  robot.keyRelease(KeyEvent.VK_ENTER);
  pause(2);
  disp('--- results of the 1st part ---');
%% // 2nd prompt:
  [~] = input('\nPress "Return" to start phase 2.\n','s');
  disp('Please wait while computation is running...'); 
  %// ^ Should only happen after another explicit press on "Enter"');
  pause(2);
  disp('--- results of the 2nd part ---');

说明:在第 1st 提示符下按 "Enter" 一次,或注释掉 robot.keyPressrobot.keyRelease 并按两次(或更多)。

使用计时器检查在出现下一个提示和 "registered button press" 之间是否经过了最短时间,从而可以确定按键是否有效。因此,用以下循环围绕 2nd 提示似乎可以解决此问题:

%% // 2nd prompt:
  tic; [~] = input('\nPress "Return" to start phase 2.\n','s');
  while toc < 0.002 %// 2ms , value may need adjustment based on the machine.
    [~] = input('','s');
  end
  disp('Please wait while computation is running...'); 
  // rest of code