2011-01-26 31 views
6

首先我做了什麼(如果它不只是我做一些簡單的愚蠢,將提供最小採樣):共享一個boost ::動態加載的庫之間的ASIO :: io_service對象

我有應支持GUI應用程序幾個網絡接口來更改GUI中顯示的內容。網絡接口被實現爲在GUI啓動時動態加載的插件。 GUI應用程序提供了一個boost :: asio :: io_service對象,它通過引用傳遞給接口,以便它們可以使用它來構建異步I/O。在GUI線程中,此io_service對象被輪詢以同步網絡接口對內容的訪問。

現在的問題是處理程序在輪詢時不會被io_service對象調用。爲了縮小這個範圍,我只實現了一個接口,並在其中創建了io_service對象,仍然從GUI線程調用輪詢並且工作正常。

我現在的問題是:是否有可能將io_service對象傳遞到運行時加載的DLL函數中?

如果場景太不清楚,我會提供一個最小的例子。

編輯:我覺得真的很愚蠢:)剛剛砍了一個最小的例子,當然 - 就像一個魅力。這幾乎意味着問題來自軟件的其他部分。

非常感謝大家的意見!

爲了使這個問題至少有點有用: 任何人想要做類似的事情(通過boost :: asio :: io_service同步網絡插件),您可以下載最小示例here

+1

這種情況很明顯,但一個例子肯定會有所幫助。 – 2011-01-28 02:27:54

+0

任何數量的DLL使用相同的io_service沒有任何問題,更重要的是,它可以被任意數量的線程使用(如果你知道你在做什麼)。所以請提供啓動異步操作的示例和輪詢 – 2011-01-31 18:18:51

回答

2

我會檢查幾個選項:
*可能對象在某個點被複制而不是通過引用傳遞;你可以使它boost :: noncopyable來防止這種情況發生。
*如果poll大於0,則檢查輪詢的返回值。如果它是0,問題是提升認爲沒有處理程序。
*在GUI應用程序中添加一個測試處理程序,以排除與DLL相關的問題。

快速調試!

相關問題