我在一个活动中使用一个TCPServer。为了简化我的设计,我使用TCPServerConnectionFactory进行活动。使用该方法,我的活动实现了CreateConnection()方法。
要创建我的TCPServer,我做:
Poco::Net::TCPServer(this, serverSocket);不幸的是,当我的TCPServer被销毁时,它也破坏了我在参数中给出的(这个)。所以这叫我的活动,这真的很烦人。
深入研究Poco代码,我看到TCPServer创建了一个Poco::shared_Ptr of ( this ),当这个shared_ptr被销毁时,它删除了Shared_Ptr的内容。
在TCPServer的生命结束时,我怎样才能把它传递给TCPServer而不被摧毁呢?
发布于 2014-10-13 23:20:48
您必须将堆上分配的连接工厂传递给TCPServer。有关示例,请参见TimeServer示例:
class TimeServerConnection: public TCPServerConnection
{
//...
};
// ...
class TimeServerConnectionFactory: public TCPServerConnectionFactory
{
// ...
TCPServerConnection* createConnection(const StreamSocket& socket)
{
return new TimeServerConnection(socket, _format);
}
// ...
};
// set-up a server socket
ServerSocket svs(port);
// retain the handle to shared ptr for later use
TCPServerConnectionFactory::Ptr pTSCF = new TimeServerConnectionFactory(format);
// set-up a TCPServer instance
TCPServer srv(pTSCF, svs);https://stackoverflow.com/questions/25286735
复制相似问题