2010-02-22 2 views
11

Je souhaite supprimer tous les gestionnaires d'un IO_service avant de les réutiliser. Est-ce possible? J'écris des tests unitaires qui impliquent un asio::io_service. Entre chaque cas de test, je veux effacer les gestionnaires du global io_service. Je pensais que io_service::reset serait à cela mais il ne le fait pas. permet uniquement la reprise du io_service. Tous les gestionnaires du dernier cas de test sont toujours en file d'attente.Supprimer tous les gestionnaires d'un boost :: asio :: io_service sans les appeler

J'ai seulement besoin de faire cela pour les tests unitaires donc tout piratage fou fonctionnerait.


Plus d'info:

Le io_service est d'une variable membre deadline_timer. Le deadline_timer fait partie du code que je suis en train de tester, donc je ne peux pas changer la façon dont il est construit. J'obtiens son io_service via la méthode get_io_service de deadline_timer.

+0

Vous ne pouvez pas créer un 'io_service' dans votre méthode' setup() 'et ensuite le détruire dans votre méthode' teardown() ', n'est-ce pas? –

Répondre

3

Eh bien, je me suis creusé la tête pendant quelques jours et j'ai trouvé une solution réalisable. C'est la mère de tous les hacks. Je ne suis pas sûr à quel point cela serait sûr pour le code de production. Mais jusqu'à présent, il semble fonctionner (pas de segmages, pas de comportement bizarre).

+0

Vous pouvez allouer le io_service dynamiquement et le stocker dans un std :: auto_ptr ou boost :: scoped_ptr. Ensuite, vous pouvez le réinitialiser lorsque vous devez "effacer" les gestionnaires. De cette façon, vous évitez d'utiliser le placement nouveau (auquel cas vous devez appeler explicitement le destructeur - voir http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10). – Yukiko

+0

@Yukiko: Je ne contrôle pas le code qui crée le io_service. De plus, je ne contrôle pas le code qui définit le io_service de deadline_timer. En bref, je n'alloue pas le io_service, donc je ne peux pas le stocker dans smart_ptr. –

+0

J'utilise boost 1.49. Cette astuce ne fonctionne pas (certaines assertions ont échoué) –

Questions connexes