|
지정된 폴더의 파일 변화 감지를 위해서 FindFirstChangeNotification()함수를 이용하는 스레드를 만들어서 파일 변화 감지를 하고있습니다.
그러다 파일 변화가 감지되면 리스트컨트롤에 SendMessage()하여 폴더를 갱신하고 있는데요
문제는 내용이 하나만바뀌더라도 필터에 걸리는 내용이 많아서 메세지를 너무 많이 보냅니다.
그러다 보니 불필요한 갱신이 계속돼 0.3초간격으로 메세지를 기달렸다가
"맨 마지막"에 도착한 메세지만 처리하게 하고싶은데 어떤방법이 좋을까요?
메세지를 받을때마다 SetTimer()로 300ms 이후에 발생할 타이머 메세지를 설정하는게 가장 좋을까요?
이 방법에 문제는 300ms 이내의 주기적으로 파일이 변경되면 호출이 안되는 문제점이 생길꺼같은데
좋은방법을 아시는분 방법좀 알려주시길 바랍니다.
대략 설명드리면
//폴더의 파일변화 감지 하는 스레드에서는 파일 변화가 감지되면 메세지를 보낸다.
::SendMessage(pNotify->m_notifyWnd, WM_REQUEST_REFRESH, idx, NULL);
// WM_REQUEST_REFRESH메세지 처리하는 함수
LRESULT CLocalView2::OnRequestRefresh(WPARAM wParam, LPARAM lParam)
{
// 폴더 내용을 갱신한다.
m_pListCtrl->RefreshFolder();
return 0;
}
현재 감지되는 필터는 총 5개입니다.
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_LAST_WRITE
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_ATTRIBUTES
질문 요약 : SendMessage()로 날라오는 메세지를 300ms정도 기다렸다가 맨 마지막에 들어온 메세지만 처리하게 하고자 합니다.
|