本人在使用文件操作函数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……
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……
{
CString str;
str.Format("log handle is invalid %d",dwError);
AfxMessageBox(str); //add
return;
}
::ReleaseMutex(HLogMutex);
我只是在操作与硬件有关的程序时,才发现这样的bug
祝你好运!
谢谢你,qj7979(qj)。