2016-11-01 164 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並觸發此事件。我認爲,這是最乾淨的解決方案。