2

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数秒単位で割り当てられていることがわかりました。そして、メモリバリダーを使用すると、それが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です。

4

0 に答える 0