2011-01-26 25 views
6

Pierwsze co zrobiłem (minimalna próbki zostaną dostarczone, jeśli jest to nie tylko ja robi coś głupiego zwykły):Udostępnianie boost :: asio :: io_service obiektu pomiędzy dynamicznie ładowanych bibliotek

Mam aplikacji GUI, który wspiera kilka interfejsów sieciowych do zmiany zawartości wyświetlanej w GUI. Interfejsy sieciowe są realizowane jako wtyczki, które są dynamicznie ładowane podczas uruchamiania GUI. Aplikacja GUI udostępnia obiekt boost :: asio :: io_service, który przechodzi przez odniesienie do interfejsów, dzięki czemu można go użyć do zbudowania asynchronicznych operacji we/wy. W wątku GUI obiekt io_service jest odpytywany, aby zsynchronizować dostęp interfejsów sieciowych do zawartości.

Problem polega na tym, że moduły obsługi nie są wywoływane przez obiekt io_service, gdy są odpytywane. Aby to zawęzić, zaimplementowałem tylko jeden interfejs i utworzyłem w nim obiekt io_service, wciąż wywołując ankietę z wątku GUI i to działa.

Moje pytanie brzmi: czy jest możliwe, że istnieje ogólny problem z przekazaniem obiektu io_service do funkcji DLL załadowanych w środowisku wykonawczym?

Jeśli scenariusz jest zbyt niejasny, podam minimalny przykład.

EDYCJA: Czuję się naprawdę głupio :) Po prostu zhakowałem razem minimalny przykład i to - oczywiście - działa jak urok. Oznacza to, że problem pochodzi z innej części oprogramowania.

Dziękuję wszystkim za ich wkład!

Aby to pytanie było co najmniej przydatne: Każdy, kto chce zrobić coś podobnego (wtyczki do synchronizacji sieci za pośrednictwem metody boost :: asio :: io_service), można pobrać minimalny przykład here.

+1

Scenariusz jest jasny, ale na pewno pomoże przykład. –

+0

Nie ma nic złego w korzystaniu z tego samego io_service przez dowolną liczbę bibliotek DLL, a co więcej, może być używana przez dowolną liczbę wątków (jeśli wiesz, co robisz). więc proszę podać przykład rozpoczęcia asynch ops i ankietowania –

+0

Tak, wydaje się, że popełniłem jakiś błąd w innym punkcie. Ten scenariusz powinien działać bez problemów. – LiMuBei

Odpowiedz

2

Chciałbym sprawdzić kilka opcji:
* Może obiekt jest kopiowany w pewnym momencie, a nie przekazywany przez odniesienie; możesz go zwiększyć :: nieoprawiony, aby temu zapobiec.
* Sprawdź wartość zwracaną dla sondowania, jeśli jest większa niż 0, który został uruchomiony; jeśli jest 0, problem polega na tym, że nie ma obsługi.
* Dodaj procedurę obsługi testu w aplikacji GUI, aby wykluczyć opcję, że jest to problem związany z biblioteką DLL.

Happy debugging!

+0

Ponieważ nie ma ogólnego problemu ze scenariuszem i po prostu muszę lepiej debugować moje oprogramowanie, zaznaczę to jako poprawną odpowiedź. Dzięki! – LiMuBei

Powiązane problemy