我用SendMessage发送消息:
LRESULT lResult=SendMessage(ms->hwnd,BM_CLICK,0,0);消息事件处理过程BM_CLICK中程序产生一个test.txt的文件;SendMessage完了之后我用
if(finder.FindFile("test.txt"))
{
}
来判断test.txt文件是否存在时,都是说不存在,但是打开硬盘目录
文件都是存在的。
假如事先test.txt已经存在,在SendMessage完了之后判断存在与否时又说存在,这说明
SendMessage后并不马上生成test.txt文件,我们怎么样等文件生成后再判断?
LRESULT lResult=SendMessage(ms->hwnd,BM_CLICK,0,0);消息事件处理过程BM_CLICK中程序产生一个test.txt的文件;SendMessage完了之后我用
if(finder.FindFile("test.txt"))
{
}
来判断test.txt文件是否存在时,都是说不存在,但是打开硬盘目录
文件都是存在的。
假如事先test.txt已经存在,在SendMessage完了之后判断存在与否时又说存在,这说明
SendMessage后并不马上生成test.txt文件,我们怎么样等文件生成后再判断?
解决方案 »
- 如何实现类和结构体封装成com
- MFC使用树控件显示磁盘所有目录
- 弱智问题,突发奇想,一台pc多个网卡的问题
- 如何新建一个注册表键值?函数参数怎么用?
- 简单的VC问题
- ADO访问不同数据库的问题?高手进来看看!
- 本人刚接触com,试着用书中的例子实现“白板”程序,其中有两个程序,一个是服务器端A,另一个是客户端B,在我自己机上注册了A,运行两个
- 急需iphelper的系列文件,如iphlpapi.h,iphlpapi.lib等
- 急急急,有关拦截api函数的问题
- 如果做一个EXE服务器,里面有一个对话框弹出来,但是作为DCOM时,这个对话框怎么都弹不出来!
- 请问combo box的高度如何设置?
- 代表VC版祝贺布什同志连任总统!代表VC版祝贺布什同志连任总统!代表VC版祝贺布什同志连任总统!代表VC版祝贺布什同志连任总统!
2、SendMessage也确实产生test.txt文件了,并且确实覆盖了原来的文件。
3、每次SendMessage的返回值是0 。但要是在SendMessage之后FindFile就是不行,除非test.txt文件在SendMessage之前已经存在。这是何故?(BM_CLICK消息如何产生文件我们无法知道,因为是调用其它进程的。)
....CTime ct;
CFileFind finder;
CString FileFullName="......";//发消息,ms->hwnd是某个按钮的句柄,在BM_CLICK事件里生成一个FileFullName文件
LRESULT SendMsgResult=::SendMessage(ms->hwnd,BM_CLICK,0,0);ct=CTime::GetCurrentTime();
//看看当时的时间
printf("\n send time :%d ,%d, %d",ct.GetHour(),ct.GetMinute(),ct.GetSecond());if(finder.FindFile(FileFullName))
{
printf("\n File Created. ");
}
finder.Close();//结果发现FileFullName文件被创建的时间在ct之后的几秒钟,因此没有打印出“File Created.”
怎么办呢?
在BM_CLICK中创建完成后返回一个事件或向主程序发送一个消息
LRESULT lResult=SendMessage(ms->hwnd,BM_CLICK,0,0);
后等待该时间或消息,成功接收后再执行
if(finder.FindFile("test.txt"))
{
}
lpPathName, // directory name
TRUE, // monitoring option
FILE_NOTIFY_CHANGE_FILE_NAME | // filter conditions
FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE
);
if (!finder.FindFile(FileFullName))
{
while (!finder.FindFile(FileFullName))
{
FindNextChangeNotification(
hChangeHandle // handle to change notification
);
}
}FindCloseChangeNotification(
hChangeHandle // handle to change notification
);
终于找出昨天的问题所在了,在SendMessage(ms->hwnd,BM_CLICK,0,0)里的BM_CLICK事件消息去完成的事件里新建了一个生成文件的线程,所以当SendMessage完成返回后,在BM_CLICK事件消息里新建的那个线程并未完成,这就导致我们在SendMessage完成后判断文件是否存在失败,因为SendMessage完成后,那个文件生成的线程并未结束,这时文件确实尚未生成。另外,好像文件生成线程也是当前主线程的子线程,所以,当我们在当前主线程作SLEEP(5000)时,生成文件的子线程也被冻结了,所以我们再怎么等一万年也等不到彩虹的出现。谢谢各位的热心帮助,发分了,请查收。