2010-06-23 29 views

回答

3

是的。但它本身不包含完整的IPC解決方案,並且可能不完全兼容那裏的每個IPC實施。對於父母和孩子,我想你是指服務器和客戶端?通常你打開某種網絡連接或者創建管道進行通信,你會得到一個文件描述符(即使你使用隱藏它的高級庫)。您可以將此文件描述符傳遞給glib並獲取回調,然後可以讀取數據(或關閉連接)。一些流行的IPC方法,如CORBADBUS已經有glib集成,所以你甚至不需要打擾文件描述符等等。 glib事件循環描述爲here。與直接使用poll()相比,它看起來可能非常複雜,但另一方面它非常便攜。

基本用法是使用g_source_new()創建一個源文件,並使用g_source_attach()將其添加到主上下文中,然後使用g_source_add_poll()將源文件描述符添加到源文件中。

如果你還沒有決定使用glib,你可能想要檢查出libevent與glib做同樣的事情,但是(恕我直言)更容易使用。它在處理1000多個同時運行的客戶端時也是明顯更好的(至少在Linux中,其他操作系統甚至可能不支持)。但另一方面,它不是可移植的,並且可能只能在兼容posix的系統上工作。

+0

不,不是服務器和客戶端。我有父母(主)過程和約10個孩子。我希望孩子聽母語命令(例如,die(),reload_config(),do_this(),do_that())和父母來收聽兒童命令(例如i_have_finished())。我不需要1000個併發客戶端,只有大約10個。命令很少。 – 2010-06-30 11:31:19

+0

如果孩子是由主人開始的本地進程,那麼只需要一個簡單的任務就可以解決(如果孩子是遠程的,你需要自己設置它,否則它並不是很不同)。您可以使用g_spawn_async_with_pipes()來啓動子進程並獲取文件描述符(如上所述使用)。你也可以得到一個可以用來獲得回調的PID,然後孩子用g_child_watch_add()終止。 – Grim 2010-07-02 01:58:14

相關問題