5

私はドキュメントを読み、プロジェクトReadDirectoryChangesW()も見ましたが、なぜそれを非同期で呼び出したいのかはどちらも言いません。現在のスレッドがブロックされないことは理解していますが、少なくとも完了ポートを使用する CDirectoryChangeWatcher コードについては、 を呼び出すと、そのスレッドはブロックされます (変更がない場合)。CDirectoryChangeWatcher GetQueuedCompletionStatus()

したがってReadDirectoryChangesW()、最初に別のスレッドで同期的に呼び出すと、それがブロックされても気にしないのに、なぜReadDirectoryChangesW()非同期で呼び出す必要があるのでしょうか?

4

3 に答える 3

1

ワーカースレッドで同期的に使用しようとしReadDirectoryChangesましたが、ブロックされたため、プログラムの終了時にスレッドが自動的に終了しませんでした。したがって、TerminateThread などの邪悪なものを使用したくない場合は、非同期呼び出しを使用する必要があります。

于 2010-01-30T20:58:19.700 に答える
1

呼び出し元のスレッドがブロックされないようにする必要がある場合は、非同期で結果を返すように ReadDirectoryChangesW を呼び出します。トートロジーですが、真実です。

このようなスレッドの候補: UI スレッドと、多数のリソース (ソケット、あらゆる種類の IPC、独立したファイルなど) のサービスを単独で担当する任意のスレッド。

プロジェクトに慣れていないので、ワーカー スレッドがブロックされても CDirectoryChangeWatcher は気にしないと思います。一般に、これがワーカー スレッドの性質です。

于 2009-07-14T17:31:51.830 に答える