線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2489
推到 Plurk!
推到 Facebook!

監控資料夾 FindFirstChangeNotification 送出兩次訊息

缺席
jjbao
一般會員


發表:1
回覆:1
積分:0
註冊:2010-02-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-03 14:06:48 IP:61.218.xxx.xxx 訂閱
為了要監控資料夾,利用了這三個API
FindFirstChangeNotification. FindNextChangeNotification. FindCloseChangeNotification
在一個thread之中去監看資料夾的行為

下列是thread執行的部分

const unsigned long dwFlags = FILE_NOTIFY_CHANGE_LAST_WRITE;
void __fastcall FileNotify::Execute()
{
unsigned long stat;
//---- Place thread code here ----
hNotify = FindFirstChangeNotification( path, true, dwFlags );
while( !Terminated && (hNotify != INVALID_HANDLE_VALUE) )
{
stat = WaitForSingleObject( hNotify, 0 );
switch( stat )
{
case WAIT_OBJECT_0:
ShowMessage( "The Directory Changed!!" );
if( !FindNextChangeNotification(hNotify) )
Terminate();
break;
case WAIT_FAILED:
Terminate();
}
}
FindCloseChangeNotification(hNotify);
}

利用ShowMessage來通知此資料夾有變更
但是當我修改資料夾當中的文件
這個通知會執行兩遍

想請問有方法只讓變更文件這個事件只通知一遍嗎?
編輯記錄
jjbao 重新編輯於 2010-02-03 14:10:51, 註解 無‧
jjbao 重新編輯於 2010-02-03 14:11:43, 註解 無‧
jjbao 重新編輯於 2010-02-03 14:12:58, 註解 無‧
jjbao
一般會員


發表:1
回覆:1
積分:0
註冊:2010-02-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-02-11 14:51:27 IP:61.218.xxx.xxx 訂閱
 後來解決的方法是不用findnextchangenotification

當第一個事件觸發之後,就把這handle關掉
重新開一個,這樣就不會送出兩次訊息

雖然notification開開關關的,但真的找不到其他方法了
在這邊提供自己的笨方法
如果有人有更好的方法,也歡迎提出來參考參考~
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-02-12 11:57:30 IP:59.125.xxx.xxx 訂閱
沒記錯的話,微軟的技術文章,有看過-其實會引發 4 次

實際忘記在哪裡的,不過是為了找 AppDomain 動態載入時看到的文章,其也是要監視硬碟內 DLL ,以便載入

最後也是自己額外處理

文有提,除有重複引發外,有時還會漏接,這我沒實測過,言詳細經驗的如果有人詳細測試過,分享一下吧, THX
另外跟文章,我忘記找到的過程了,後來一直沒機會在見面,如果有人找到可能、疑似、是我說的文章,煩請附上連結,我也想再看一次
不同的也行,當作多多學習也好, THX

===================引 用 jjbao 文 章===================
後來解決的方法是不用findnextchangenotification

當第一個事件觸發之後,就把這handle關掉
重新開一個,這樣就不會送出兩次訊息

雖然notification開開關關的,但真的找不到其他方法了
在這邊提供自己的笨方法
如果有人有更好的方法,也歡迎提出來參考參考~
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-02-12 20:35:43 IP:112.105.xxx.xxx 訂閱
MSDN 


http://msdn.microsoft.com/zh-tw/library/ded0dc5s(VS.80).aspx


高容量系統的檔案變更考量
系統時間:2024-04-18 21:41:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!