events - 操作系统或系统程序如何等待用户输入?

标签 events input system dispatch

我来自网络编程领域,通常服务器通过指定的方法(get、post 等)设置一个超全局变量,使用户输入到字段中的数据可用。另一种方法是使用 AJAX 向事件注册回调方法,一旦浏览器通知 AJAX XMLhttpRequest 对象将启动该事件(我假设......)。所以我想我的问题是,是否存在某种调度接口(interface),系统程序员的代码必须与之交互以响应用户输入来执行,或者程序员是否直接控制“等待”过程?如果有调度,操作系统中是否存在等待特定事件发生的循环结构?

我被提示在这里问这个问题,因为我正在上一门基本的编程逻辑课,教授不会回答这样一个“复杂”的问题。我的书给出了一个模糊的伪代码示例,例如:

    //start
    sentinel_val = 'stop';
    get user_input;
while (user_input not equal to sentinel_val)
     {
         // do something.
         get user_input;
     }
     //stop

这个例子让我相信 1) 如果没有收到来自用户的输入,循环将继续重复使用旧输入或没有输入的序列“做某事”,直到新输入神奇地出现,然后它会再次重复与那个或一个空值。这本书似乎试图使用启动和读取文件的示例来传达程序如何从事件驱动的输入中获取数据,不是吗?

我很困惑:(

最佳答案

在最低级别,计算机的输入是异步的——它是通过“中断”发生的,这基本上是 CPU(键盘 Controller )外部的东西,它向 CPU 发送一个信号,上面写着“停止你正在做的事情”做并接受这些数据”。 (这很复杂,但这是一般的想法)。因此 CPU 停止,抓取击键,并将其放入缓冲区以进行读取,然后继续执行中断前的操作。

入站网络流量和从磁盘读取的结果等情况非常相似。

在更高的层次上,它更加依赖于您正在使用的操作系统或框架。

使用键盘输入时,可能会有一个进程(基本上是应用程序)被阻塞,等待用户输入。该“ block ”并不意味着计算机只是坐在那里等待,而是让其他进程运行。但是当键盘结果进来时,它会唤醒正在等待它的人。

从等待过程的角度来看,他们调用了某个函数“get_next_character()”,该函数与字符一起返回。等等。

坦率地说,所有这些东西如何联系在一起非常有趣且易于理解。 :)

关于events - 操作系统或系统程序如何等待用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285652/

相关文章:

jquery - <input type ="text"/>中的文字描边

C 函数对于任何输入都不为 'wait',但检测是否有?

javascript - 防止数字输入的 maxLength 不断改变最后一个数字的值?

Unix系统编程

c - 使用 system() 函数打开 C 语言运行时给出的文件名

javascript - 更改从事件监听器获取 URL?

c# - 在 C# 中调用 PLC Tag datachage 上的事件

c# - 事件触发的次数越来越多

java - 系统如何从.properties文件中读取数据?

Android - 拦截并传递所有触摸事件