2011-03-22 184 views
1

HI all!运行等待完成异步操作

有一个io_service对象,方法()的作品在一个线程池。 有一组类,它们使用ip :: tcp :: socket进行异步写入。 我需要阻止这种类的析构函数,直到他的任务存在于io_service的队列中。 例如,添加方法join()。但是阻止析构函数的原因是什么?

+0

“竞争”还是“完成”? – 2011-03-22 10:26:04

+0

@Paul R:谢谢;) – niXman 2011-03-22 10:29:04

回答

0

我不知道如果我正确地理解你的问题,但它听起来像是你想确保正在等待优秀的异步操作的类操作完成之前不被破坏?

enable_shared_from_this成语可以用于此目的,并且证明例如在http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/tutorial/tutdaytime7/src.html。如果你看看tcp_connection :: start,你会看到类是如何将shared_ptr传递给自身的,以便作为异步操作的处理器进行绑定。

+0

伪代码:http://liveworkspace.org/code/a6f5e11d7ed2e902c64a13ce8b3889cf – niXman 2011-03-22 11:47:38

+0

@niXman:如果您在指定异步写入处理程序时使用shared_from_this(),则无需担心阻塞析构函数。 shared_ptr将管理上下文类的生命​​周期。 – Ralf 2011-03-22 15:19:37

+0

当这些物体将会死亡时,我并不感到兴奋。当他所有的异步操作完成时,我需要在析构函数中捕捉到这一瞬间。这个问题像这样解决了:http://liveworkspace.org/code/7665b7170b3311085fff2e84710d4350 – niXman 2011-03-25 15:45:16