当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《2个或更多进程如何与键盘交互?》经验,为你挑选了1个好方法。

我一直在思考键盘处理问题.它是如何工作的?我似乎无法向我提出一个很好的解释.

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

但接下来会发生什么?我们来看一个实际的例子吧.运行以下代码时会发生什么:

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

是否cin从系统级键盘缓冲区的用户级别表示中读取?这在我的头脑中是完全合理的,因为那时2或更多的进程可以从同一缓冲区中读取,并且通过这种方式我不会松开任何按键.但这样做有用吗?

我知道我的谈话非常笼统.我正在使用的操作系统是OS X.



1> S.Lott..:

除极少数情况外,您的键盘和显示器由Window Manager管理:X11,Gnome,KDE,Carbon,Cocoa或Windows.

它的工作原理如下.

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

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

    中断转到操作系统.

    OS通过排队来响应中断.最终 - 当没有更高优先级的时候 - 它从中断中捕获键盘输入并缓冲它.

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

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

示例1 - 您正在运行命令行应用程序.在终端窗口.当终端窗口位于最前面时,窗口管理器指示终端窗口处的事件.键盘事件成为stdin流.

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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有