Qpid使用異步回調機制實現通訊,提高通訊效率。 其中,客戶端發收接收也是使用該機制。這樣客戶端須要退出時,可能IO線程正在回調,並使用須要析構的對象。所以在客戶端退出時,須要確保析構的對象不會再被回調使用。 異步
Qpid客戶端與鏈接相關的對象是: socket
IOThread(Poller) 線程
Connection ---> ConnectionImpl -->TCPConnector -->AsyncIO 對象
ConnectionHandler it
一、ConnectionImpl的shared_ptr在釋放時,ConnectionImpl::release=>TCPConnector::close=>AsyncIO::queryWriteClose io
二、這些會引發TCPConnector的socketClosed回調。 效率
三、該回調再調用shutdownHandler->shutdown(),即ConnectionImpl中的shutdown,設置可結束標記。 sed