rtf ファイルを監視して、しばらくの間 (たとえば 15 分) 更新されているかどうかを確認するにはどうすればよいですか。更新されていない場合は、ファイルが更新されていないことをメイン スレッドに知らせます。WaitforSingleObject 関数を使用して、過去 15 分間の変更を待機することを考えています。この機能をどのように実装できますか?
4 に答える
探しているのは 、 などのファイル変更通知FindFirstChangeNotification
だFindNextChangeNotification
とReadDirectoryChangesW
思います。ファイルまたはディレクトリの変更、名前変更、書き込みなどを監視します。
WaitForSingleObject に言及しているため、おそらくプラットフォームは Windows です。その場合、探している関数はReadDirectoryChangesWです。これにより、ポーリングを実行しなくても、変更が行われるとすぐに通知を受けることができます。
Jim Beveridge は、ある程度深く掘り下げた優れた 2 つの記事を書いています。
私の意見では、これは 2 つの方法で達成できます。ファイルの書き込み操作を監視できるファイル フィルター ドライバーを作成できます。ただし、これは少しストレッチです。
もう1つの方法は簡単です。メイン スレッドで、RTF ファイルのハッシュを作成してキャッシュします。非シグナル状態のイベントを作成し、コールバック関数を作成し、ワーカー スレッドを作成します。イベントのワーカー スレッドで 15 分間待機します。タイムアウト後、ファイルのハッシュを再度生成し、キャッシュされたハッシュと比較します。不一致の場合は、コールバック関数を介してメイン スレッドに通知します。