Boost :: asio :: async_write似乎没有释放内存

时间:2013-07-24 14:40:58

标签: c++ networking boost boost-asio

我有一个使用boost asio的群集程序来构建网络。

我正在使用async_write函数将消息从服​​务器写入客户端:

boost::asio::async_write( *m_Socket,
    boost::asio::buffer( iData, iSize ),
    boost::bind(
        &MyObject::handle_write, this,
        boost::asio::placeholders::error ) );

我的handle_write方法:

void
MyObject::handle_write( const boost::system::error_code& error )
{
    std::cout << "handle_write" << std::endl;
    if (error)
    {
        std::cout << "Write error !" << std::endl;
        m_Server->RemoveSession(this);
    }
}

似乎运作良好。当我使用内存泄漏检测程序时,根本没有泄漏。

但是,我的程序应该运行很多天没有中断,在测试期间,似乎我没有足够的内存......经过一些检查,我发现我的程序是在0.3Mo左右分配的秒。使用memory validor我发现它已进入boost::asio::async_write ...

我检查了文档,我想我是以正确的方式使用它...我错过了什么?

编辑1:

这就是我调用async_write本身的函数的方式:

NetworkMessage* msg = new NetworkMessage;

sprintf(msg->Body(), "%s", iData );

m_BytesCount += msg->Length();

uint32 nbSessions = m_Sessions.size();

// Send to all clients
for( uint32 i=0; i < nbSessions; i++)
{
    m_Sessions[i]->Write( msg->Data(), msg->Length() );
 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

delete msg;

msg->Data是传递给async_write的数据。

0 个答案:

没有答案