关于文件操作函数CreateFile的问题
本人在使用文件操作函数CreateFile有问题(偶尔发生,频率不高),望高手分析一下。具体代码如下:(主要实现写文件功能,被多个线程调用,封装成一个函数)
::WaitForSingleObject(HLogMutex,INFINITE);
h_logfile=CreateFile(
"..\\logdata\\logdata.com",
GENERIC_WRITE,
0,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL
);
dwError = GetLastError();
if(INVALID_HANDLE_VALUE==h_logfile)
{
CString str;
str.Format("log handle is invalid %d",dwError);
AfxMessageBox(str);
}
……
DWORD bResult=WriteFile( h_logfile,
log_str,
logstr_len,
&NumberOfBytesWrite,
NULL
);
if(h_logfile!=INVALID_HANDLE_VALUE)
{
DWORD CHerr=CloseHandle(h_logfile);
if(0==CHerr)
{
dwError = GetLastError();
CString str;
str.Format("close handle is fail. the errcode is %d",dwError);
AfxMessageBox(str);
}
}
::ReleaseMutex(HLogMutex);
长期运行后,会发生问题“log handle is invalid 32”,即文件访问冲突(正被另一进程使用),但CloseHandle没有发生错误(没有报错,应该都成功了)。访问冲突的具体原因是什么呢?疑惑ing……