丢弃连续调用输入之间的键盘事件 (MATLAB)
Discarding keyboard events between consecutive calls to input (MATLAB)
我的代码包含以下重复模式:
- 要求用户按 ⏎ 开始计算(使用
input
)。
- 执行一些冗长的计算并向用户显示一些信息。
- 等待用户再次按下 ⏎ 以进行进一步的计算。
我面临的问题: 如果用户在 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.keyPress
和 robot.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
我的代码包含以下重复模式:
- 要求用户按 ⏎ 开始计算(使用
input
)。 - 执行一些冗长的计算并向用户显示一些信息。
- 等待用户再次按下 ⏎ 以进行进一步的计算。
我面临的问题: 如果用户在 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.keyPress
和 robot.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