3

我一直在考虑键盘处理。它是如何工作的?我似乎无法用谷歌搜索我的解释。

我知道每次按下一个键都会产生一个键盘中断。处理器暂停它正在处理的任何事情,并从键盘缓冲区加载键盘数据,将其存储在系统级缓冲区中。

但接下来会发生什么?让我们举一个实际的例子。当我运行以下代码时会发生什么:

...
std::string s;
std::cin >> s;
....

是否cin从系统级键盘缓冲区的用户级表示中读取?这在我的脑海中非常有意义,因为可以从同一个缓冲区读取 2 个或更多进程,这样我就不会松开任何按键。但它是这样工作的吗?

我知道我说的是非常笼统的说法。我使用的操作系统是 OS X。

4

1 回答 1

13

除极少数情况外,您的键盘和显示器由窗口管理器管理:X11、Gnome、KDE、Carbon、Cocoa 或 Windows。

它是这样工作的。

键盘驱动程序是操作系统的一部分。

窗口管理器是一个特权进程,它在启动期间获取设备。窗口管理器“拥有”该设备。只。

  1. 中断转到操作系统。

  2. 操作系统通过排队响应中断。最终——当没有更高优先级的事情要做时——它从中断中捕获键盘输入并缓冲它。

  3. 拥有进程(窗口管理器)正在读取此缓冲区。由此,它创建键盘事件。

您的应用程序通过窗口管理器工作。

示例 1 -- 您正在运行一个命令行应用程序。在终端窗口中。当终端窗口位于最前面时,窗口管理器将事件定向到终端窗口。键盘事件成为标准输入流。

示例 2——您正在运行 GUI 应用程序。在您自己的应用程序窗口中。当您的应用程序的窗口位于最前面时,窗口管理器会将事件定向到您的应用程序窗口。键盘事件可供您处理各种 GUI 控件。某些键盘事件可能会在控件或活动按钮之间循环。

于 2009-04-05T20:53:03.480 回答