2016-11-01 41 views
0

我有一个Connection对象,表示由epoll管理的连接。在事件中,调用Connection::eventWrite()Connection::eventRead()。连接是永久的(始终存在)。如何在任何事件发生之前唤醒epoll_wait()?

我需要通过该Connection从另一个线程发送数据,但不希望直接访问对象Connection,因为我不想解决Connection对象内部多线程问题(Connectionepoll -thread和访问“发送线程”)。相反,我想告诉epoll -thread:“醒来后用Connection做些什么” - epoll_wait()应该返回,我的代码会发现CUSTOM EVENT发生了(例如,应该调用某个函数,访问Connection将执行(分配将数据发送到对象,调用writeEvent()),然后epoll_wait() -loop将继续进行。

,以唤醒存在什么样的解决方案epoll_wait(),哪一个更快呢?现在,我来了创建一个pipe(由相同的epoll处理)并写入一个字节1它还有什么其他的IPC可以通过int“epollable”文件描述符R'

回答

1

Epoll可以在eventfd上等待。在你的情况下,我会创建一个eventfd并触发此事件。我认为,这是最干净的解决方案。