0

我正在对 Linux 内核进行一些研究,尤其是输入子系统。我有兴趣阅读 /dev/input/eventX 设备以获取不同的输入事件(主要是键盘和鼠标)。

但是read()操作阻塞。我唯一能想到的是创建所有键盘键和鼠标按钮的状态,然后创建一个新线程来读取键盘和鼠标状态(这些线程可能不时被阻塞),并从我的主进程中,访问键盘和鼠标的状态。

但是,我在 C++ 和 Linux 下的非阻塞编程方面不是很有经验,我认为每个设备的线程可能是一种矫枉过正。

我想知道是否有其他方法可以以非阻塞方式处理输入,或者使用线程可以吗?

谢谢,斯威。

4

2 回答 2

1

您可以查看 poll 系统调用。用于处理多个文件描述符上的 I/O。一种可能性是只产生一个线程来轮询多个文件描述符上的事件。

这是一些阅读材料: http: //www.makelinux.net/ldd3/chp-6-sect-3

于 2013-08-30T20:11:20.093 回答
1

您可以将文件描述设置为非阻塞。您还可以使用 select/poll 来检查是否可以读取数据,在这种情况下您不需要非阻塞。看到这个线程;

读取描述符的非阻塞调用

于 2013-08-30T20:28:33.030 回答