2010-09-25 18 views
5

Podczas testów jednostkowych dla systemu klient/serwer w pracy, natknąłem się na problem, w którym moja io_service nie zwalniała po tym, jak zamknąłem wszystkie aktywne procedury obsługi (o których wiedziałem).Lista aktywnych procedur ładujących io_service

Po dniu trałowania kodu natknąłem się na błędny przewodnik, który nie był zintegrowany z procedurami zamykania mojego klienta.

Moje pytanie brzmi następująco: Czy istnieje prosty sposób na wylistowanie aktualnie aktywnych instrukcji w boost io_service ?, jeśli nie, dlaczego nie?

Każdy wgląd byłby doceniony.

+1

+1 interesujące pytanie. Widziałem to pytanie na liście dyskusyjnej użytkowników asio-users, ale nie sądzę, że zostało to odebrane. http://sourceforge.net/mailarchive/forum.php?thread_name=i3aupp%2458b%241%40dough.gmane.org&forum_name=asio-users –

Odpowiedz

1

Istnieje kilka kwestii:

  • Książka zrzucający staną się droższe, zwłaszcza w systemach o dużej liczbie operacji i znacznego współbieżności.
  • Nawet jeśli otrzymałeś listę, nie wiesz, czy jest ona aktualna.

Nie wiem, czy są to konkretne powody boost :: asio, ale te przyczyny wyskakują na mnie.

Aby rozwiązać rzeczywisty problem, destruktory i lunety są Twoimi przyjaciółmi. Uważam, że użyteczne jest posiadanie pojemnika z uchwytami do obiektów wysokiego poziomu (np. Nasłuchujących nasadki) i po prostu pozwolić im wyjść poza zasięg, kiedy chcesz się zamknąć. Uważam, że shared_ptr jest dobre, ale można użyć wszystkich wariantów.

Jeśli musisz wywołać metodę stop() na każdym obiekcie, który chcesz zatrzymać, zapomnisz o czymś. Niech destruktory wykonają pracę.

Powiązane problemy