6

私はより良い例を求めていますboost::asio::deadline_timer

与えられた例は、常にタイムアウトしてcloseメソッドを呼び出します。タイマーで呼び出しcancel()てみましたが、渡された関数がasync_waitすぐに呼び出されます。

非同期TCPクライアントでタイマーを操作する正しい方法は何ですか?

4

1 に答える 1

20

タイマーで cancel() を呼び出すと、 async_wait に渡された関数がすぐに呼び出されると述べています。これは予期される動作ですが、タイマー ハンドラーに渡されたエラーをチェックして、タイマーがキャンセルされたかどうかを判断できることに注意してください。タイマーがキャンセルされた場合、operation_aborted が渡されます。例えば:

void handleTimer(const boost::system::error_code& error) {
    if (error == boost::asio::error::operation_aborted) {
        std::cout << "Timer was canceled" << std::endl;
    }
    else if (error) {
        std::cout << "Timer error: " << error.message() << std::endl;
    }
}

うまくいけば、これが役に立ちます。そうでない場合、探している具体的な例は何ですか?

于 2009-12-19T00:43:16.447 に答える