1

ドキュメントを読み、BOOST_ASIO_DISABLE_IOCPプリプロセッサ定義を使用cancel()して Windows XP のソケットを呼び出すことができることを理解しました。Boost ライブラリは、select代わりに ベースのソリューションを使用し、すべてが正常に動作するはずです。

この説明が正しい場合、selectベースのアプローチの欠点は何ですか? を常に定義すべきではないのはなぜBOOST_ASIO_DISABLE_IOCPですか?


編集1

BOOST_ASIO_DISABLE_IOCP問題なく定義された DLL をコンパイルしました。残念ながら、最終的なアプリケーションと統合した後、メモリ アクセス エラーが発生します。不足している追加の構成はありますか?

4

1 に答える 1

1

IOCPは、はるかに優れたパフォーマンスを提供するはずです。

ちなみに、本当に使わないといけないのcancel?ソケットでのI/O操作をキャンセルした後は、データフローの実際の状態がわからないため、ピアと同期するための高度な方法が必要になることに注意してください。したがって、通常、正しい方法closeはソケットを使用することです。

残念ながら、最終的なアプリケーションとの統合後、memmroyアクセスエラーが発生します。

おそらく、Boost.Asioヘッダーを使用するモジュールがいくつかありますが、それらすべてにBOOST_ASIO_DISABLE_IOCPを定義していないため、ODR違反が発生していますか?

于 2012-07-25T11:11:11.360 に答える