私はboost::asio::deadline_timer
にバインドされたコールバック関数を持っています。この関数は、タイマーがキャンセルされたとき、またはタイマーが時間切れになると呼び出されます。この2つのケースを区別する必要があるので、渡されたエラーコードを確認する必要があります。基本的なコードは次のようになります:ブーストエラーコードを適切にカウントクックするには?
void CameraCommand::handleTimeout(const boost::system::error_code& error)
{
std::cout << "\nError: " << error.message() << "\n";
return;
}
今、タイマーがエラーコードを経過したため、ハンドラが呼び出されたときに、タイマは、エラーコードがOperation canceled
でキャンセルされた場合、Success
です。
私の質問は、どのように起こったのかを適切にチェックする方法でしょうか?
提案1:
if(error.message() == "Success")
{
// Timer expired
}
else
{
// Timer cancelled
}
提言2:
if(error.value() == 0)
{
// Timer expired
}
else
{
// Timer cancelled
}
今私の質問です - byitselfない値または文字列でエラーを比較する方法はありますか?ような何か(これは今まで行われているが)
if (error == boost::system::error::types::success)
私は最初の提案については好きではない、私はちょうど私の意見ではちょっと不要ですチェックのための文字列を作成する必要があるということですので。 2番目の方法は、私が他の何かをチェックしたい場合、すべてのエラーコードを調べる必要があるという欠点がありますか? エラーを確認する列挙型や方法はありますか、または2つの方法のいずれかがありますか?
あなただけのブールキャストを使用することができます
素晴らしい - 私が探していたもの!ありがとうございました!!! – Toby
うん、これは間違っているかもしれない。これは、error_codesとerror_conditionsを比較する必要があり、比較のためにvalue()を使用しないでください。 http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-2.html –
これは間違っています。 boost error_codeにはカテゴリと値があります。同じ値が複数のカテゴリに存在する可能性があります。両方を確認する必要があります。 –