HANDLE m_hEvent;
HANDLE m_arhChange[2];
BOOL m_bExit;
void CMonitorDir()
{
for(int i = 0; i < 2; i++)
{
m_arhChange[i] = m_hEvent;
}
m_bExit = FALSE;
m_arhChange[0] =::FindFirstChangeNotification("d:\\DCM",
FALSE,FILE_NOTIFY_CHANGE_FILE_NAME);
m_arhChange[1] =::FindFirstChangeNotification("d:\\RDCM", FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME);
AfxBeginThread(MonitorThread, this);
}
UINT MonitorThread(LPVOID lpParam)
{
CtestfileMonitorDlg* pDlg = (CtestfileMonitorDlg*)lpParam;
while(TRUE)
{
// 在多个改变通知事件上等待
DWORD nObjectWait = ::WaitForMultipleObjects(2, pDlg->m_arhChange, FALSE,
INFINITE);
if(pDlg->m_bExit)
{
break;
}
// 查找促使等待函数返回的句柄,通知用户
int nIndex = nObjectWait - WAIT_OBJECT_0;
// 继续监视
::FindNextChangeNotification(pDlg->m_arhChange[nObjectWait]);
}
return 0;
}
//停止函数
void Stop()
{
if(!m_bExit)
{
m_bExit = TRUE;
for(int i = 0; i < 2; i++)
{
if(m_arhChange[i] != m_hEvent)
{
::FindCloseChangeNotification(m_arhChange[i]);
}
}
}
}