gpt4 book ai didi

c++ - 2个或更多进程如何与键盘交互?

转载 作者:太空狗 更新时间:2023-10-29 19:45:10 24 4
gpt4 key购买 nike

我一直在思考键盘处理问题。它是如何工作的?我似乎无法通过 google 找到一个好的解释。

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

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

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

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

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

最佳答案

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

它是这样工作的。

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

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

  1. 中断转到操作系统。

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

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

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

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

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

关于c++ - 2个或更多进程如何与键盘交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com