据我所知,C中的this
函数只能等待文件描述符变为活动状态(即读取它们不会阻塞。)
这对于命令行消息传递应用程序很有用,因为所有内容都是套接字文件描述符或stdin。
但是,如果我想将它与GUI应用程序结合使用(例如,用Gtk编写的那个?)
我认为没有办法告诉class WidgetManager {
...
private:
std::shared_ptr<Widget> _pW;
std::shared_ptr<Widget>& get_widget()
{
return _pW;
}
const std::shared_ptr<const Widget> get_widget() const
{
return _pW;
}
}
等待按下按钮,对吗?那么我必须使用多线程吗?
答案 0 :(得分:2)
如果要将非fd活动合并到基于select
的事件循环(或其他与fd相关的替代方案,如epoll
)中,则可以使用管道来实现。由事件触发的操作(例如按下按钮)将事件的描述写入管道,select
掩码包括管道的读取端,因此将通知数据可用性。 / p>
如果事件和处理程序处于同一个进程中,则不必完全序列化事件描述,因为可以使用某些其他机制(事件的内存中队列,或某些此类事件)。但是,由于大多数事件可以在几个字节内轻松有效地描述,因此序列化事件可提供易于扩展的体系结构。