在一个unicode dll( COM)中,循环中使用CreateFile创建打开文件,当到6500次左右时候,程序直接退出,没有任何提示

httpaspjspphp 2009-12-29 02:48:03
dll中,在一个循环中使用CreateFile创建打开文件,当到6500个左右时候,程序直接退出,没有任何提示

该循环是在一个线程中

已经使用关闭函数。
这个dll是按 unicode 写的,在非unicode下正常

for( )
{

HANDLE hbmpFile = CreateFile(bmpFile, GENERIC_ALL, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if(hbmpFile== INVALID_HANDLE_VALUE)
{
m_logfile->AddText(GetLastError());

return FALSE;
}


//其他处理


if (NULL==CloseHandle(hbmpFile))
{
Msg(TEXT("CloseHandle failed"));
}



}


当运行到6500次左右时候,不会提示任何错误,调用该dll的进程直接退出。



...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsnpeter 2009-12-31
  • 打赏
  • 举报
回复
只创建,没有删除啊?这样会不会资源不足导致错误?
httpaspjspphp 2009-12-30
  • 打赏
  • 举报
回复
好像不是这个原因
因为在非unicode下一秒钟创建20个左右
可以连续运行一周都没有问题
oyljerry 2009-12-29
  • 打赏
  • 举报
回复
是不是创建的文件太多,空间不够...或者引起其他异常
httpaspjspphp 2009-12-29
  • 打赏
  • 举报
回复
已经定位到
HANDLE hbmpFile = CreateFile(bmpFile, GENERIC_ALL, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);

在这一句前面加一个
m_logfile->AddText("11111111111111");

HANDLE hbmpFile = CreateFile(bmpFile, GENERIC_ALL, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
后面加一个
m_logfile->AddText("222222222222");

就会很清楚的看到这一句中CreateFile函数无声无息的退出了
oyljerry 2009-12-29
  • 打赏
  • 举报
回复
自己增加log输出,这样退出的时候先定位问题的语句等
httpaspjspphp 2009-12-29
  • 打赏
  • 举报
回复
Unicode Release下也会悄然无声的退出
httpaspjspphp 2009-12-29
  • 打赏
  • 举报
回复
Unicode Debug下就会这样
但是在 Debug 或者Release下正常

谢谢大家
请帮忙

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧