C++ 在Linux中以非阻塞方式读取原始输入

C++ 在Linux中以非阻塞方式读取原始输入,c++,linux,nonblocking,C++,Linux,Nonblocking,我正在研究Linux内核,特别是输入子系统。我对读取不同输入事件(主要是键盘和鼠标)的/dev/input/eventX设备感兴趣 但是,read()操作会阻塞。我唯一能想到的是创建所有键盘键和鼠标按钮的状态,然后创建一个新线程来读取键盘和鼠标状态(这些线程可能会不时被阻止),然后从我的主进程访问键盘和鼠标的状态 不过,我在C++和Linux的非阻塞编程方面并不是很有经验,我认为每个设备的线程可能是一个过份的错误。 我想知道是否有其他方法以非阻塞方式处理输入,或者使用线程也可以 谢谢,skwee

我正在研究Linux内核,特别是输入子系统。我对读取不同输入事件(主要是键盘和鼠标)的/dev/input/eventX设备感兴趣

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

不过,我在C++和Linux的非阻塞编程方面并不是很有经验,我认为每个设备的线程可能是一个过份的错误。 我想知道是否有其他方法以非阻塞方式处理输入,或者使用线程也可以


谢谢,skwee。

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


这里有一些阅读材料:

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