我的一段关于线程的程序如下:
//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Thread.h"#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall WatchThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------__fastcall WatchThread::WatchThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall WatchThread::Execute()
{
//---- Place thread code here ----
DWORD dwWaitStatus ;
bool IsChange =false ; HANDLE dwChangeHandle ; //返回通知的句柄 dwChangeHandle=FindFirstChangeNotification( "E:\\restep", false, FILE_NOTIFY_CHANGE_LAST_WRITE) ; //设置返回通知的句柄 if(dwChangeHandle==INVALID_HANDLE_VALUE) ExitProcess(GetLastError()) ; while(true) //设置循环,监视是否有
{
IsChange = FindNextChangeNotification(dwChangeHandle) ; if( IsChange )
{
dwWaitStatus = WaitForSingleObject(dwChangeHandle,-1) ; //通知返回 switch(dwWaitStatus)
{
case 0:
ShowMessage("文件内容已经发生变化,请刷新!");
WinExec("C:\\Program Files\\EDS\\Unigraphics NX\\STEP214UG\\step214ug.cmd" ,SW_RESTORE); continue ; default: FindCloseChangeNotification(dwChangeHandle) ; //关闭句柄 ExitProcess( GetLastError() ) ; break ;
}
}
}
}
//---------------------------------------------------------------------------
可是运行时,在第一次文件夹下发生变化时,后调用程序,当文件夹下再次发生变化时,却没响应了,不知什么原因,高手能看一下吗?我想要实现的是在一个指定的文件夹下每当有文件发生一次变化,就调用一次应用程序
//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Thread.h"#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall WatchThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------__fastcall WatchThread::WatchThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall WatchThread::Execute()
{
//---- Place thread code here ----
DWORD dwWaitStatus ;
bool IsChange =false ; HANDLE dwChangeHandle ; //返回通知的句柄 dwChangeHandle=FindFirstChangeNotification( "E:\\restep", false, FILE_NOTIFY_CHANGE_LAST_WRITE) ; //设置返回通知的句柄 if(dwChangeHandle==INVALID_HANDLE_VALUE) ExitProcess(GetLastError()) ; while(true) //设置循环,监视是否有
{
IsChange = FindNextChangeNotification(dwChangeHandle) ; if( IsChange )
{
dwWaitStatus = WaitForSingleObject(dwChangeHandle,-1) ; //通知返回 switch(dwWaitStatus)
{
case 0:
ShowMessage("文件内容已经发生变化,请刷新!");
WinExec("C:\\Program Files\\EDS\\Unigraphics NX\\STEP214UG\\step214ug.cmd" ,SW_RESTORE); continue ; default: FindCloseChangeNotification(dwChangeHandle) ; //关闭句柄 ExitProcess( GetLastError() ) ; break ;
}
}
}
}
//---------------------------------------------------------------------------
可是运行时,在第一次文件夹下发生变化时,后调用程序,当文件夹下再次发生变化时,却没响应了,不知什么原因,高手能看一下吗?我想要实现的是在一个指定的文件夹下每当有文件发生一次变化,就调用一次应用程序
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货