質問

私が使っているブ::asioいようにします:

void CServer::Start(int port)
{ 
    tcp::acceptor acceptor(m_IoService, tcp::endpoint(tcp::v4(), port));

    for ( ;; )
    {
        shared_ptr<tcp::socket> pSocket(new tcp::socket(m_IoService));

        acceptor.accept(*pSocket);

        HandleRequest(pSocket);
    }
}

このコードを作品にしてしまいましたが、まず私が切り替え用アクセプター::async_acceptできるよう、通話アクセプター::キャンセルを停止します。

このようなコードになります:

void CServer::StartAsync(int port)
{ 
    m_pAcceptor = shared_ptr<tcp::acceptor>( new tcp::acceptor(m_IoService, tcp::endpoint(tcp::v4(), port)) );

    StartAccept();
}

void CServer::StopAsync()
{
    m_pAcceptor->cancel();
}

void CServer::StartAccept()
{
    shared_ptr<tcp::socket> pSocket(new tcp::socket(m_IoService));

    m_pAcceptor->async_accept(*pSocket, bind(&CServer::HandleAccept, this, pSocket));   
}

void CServer::HandleAccept(shared_ptr<tcp::socket> pSocket)
{
    HandleRequest(pSocket);

    StartAccept();
}

このコードな仕事をしてみると、機能CServer::HandleAcceptなが呼び出されます。そのアイデア?またサンプルコードの主な違いは自分のコードは、彼らがうことが多くあると思いクラスのようにtcp_connectionのソケットのメンバーの一員として、見たいな方法が良いと思いますを見て、なぜ私が必要です。

  • アレックス
役に立ちましたか?

解決

ああ、あなたは例えば、IOServiceのを実行するために必要なものをキックオフするようになっています。

m_IoService.run();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top