将 select() 与非基于文件描述符的输入一起使用

Use select() with a non-file-descriptor-based input

本文关键字:输入 描述 一起 select 于文件 文件      更新时间:2023-10-16

据我所知,C 中的select()函数只能等待文件描述符变为活动状态(即读取它们不阻塞(。

这对于命令行消息传递应用程序很有用,因为所有内容都将是套接字文件描述符或标准配置。

但是,如果我想将其与 GUI 应用程序(例如,用 Gtk 编写的应用程序(合并怎么办?

我想没有办法告诉select()等待按下按钮,对吧?那么我必须使用多线程吗?

如果要将非 fd 活动合并到基于select的事件循环(或其他与epoll相关的替代项(中,则可以使用管道来实现。事件触发的操作(例如按下按钮(将事件的描述写入管道,select掩码包括管道的读取端,因此将通知它数据可用性。

如果事件和处理程序位于同一进程中,则无需完全序列化事件描述,因为可以使用其他机制(内存中事件队列或类似机制(。但是,由于大多数事件可以在几个字节内轻松有效地描述,因此序列化事件提供了一种易于扩展的体系结构。