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.
Scenariusz jest jasny, ale na pewno pomoże przykład. –
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 –
Tak, wydaje się, że popełniłem jakiś błąd w innym punkcie. Ten scenariusz powinien działać bez problemów. – LiMuBei