2011-03-22 182 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