English 中文(简体)
两个或多个进程如何与键盘交互?
原标题:
  • 时间:2009-04-05 20:39:36
  •  标签:

我一直在考虑键盘的操作。它是如何工作的?我似乎无法在谷歌上找到一个好的解释。

我知道每次按键时都会出现键盘中断。处理器暂停正在处理的一切,并从键盘缓冲区加载键盘数据,将其存储在系统级缓冲区中。

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

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

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

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

最佳回答

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

它是这样工作的。

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

窗口管理器是一个特权进程,它在启动过程中获取设备。窗口管理器“拥有”该设备。唯一地

  1. 中断进入操作系统。

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

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

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

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

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

问题回答

暂无回答




相关问题
热门标签