gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:05 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

如果您想将非 fd 事件合并到基于 select 的事件循环(或其他与 fd 相关的替代方案,如 epoll)中,您可以使用管道。事件触发的 Action (如按下按钮)将事件的描述写入管道,select掩码包含管道的读取端,因此会通知数据可用性。

如果事件和处理程序在同一个进程中,则没有必要完全序列化事件描述,因为可以使用其他一些机制(内存中的事件队列等)。然而,由于大多数事件都可以用几个字节轻松有效地描述,因此序列化事件提供了一种易于扩展的架构。

关于c++ - 将 select() 与基于非文件描述符的输入一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50764891/

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