读书人

WriteFile怎么实现异步写入

发布时间: 2012-02-27 10:00:22 作者: rapoo

WriteFile如何实现异步写入?
WriteFile是一个写入文件的API函数,
该函数最后一个参数是一个OVERLAPPED结构。

如果使用该参数,就可以实现异步写入文件,即:写文件立即返回,从而可以提高并发处理性能。

请问谁有使用该参数实现异步写入这样的例子?谢谢

[解决办法]
http://msdn2.microsoft.com/en-us/library/aa365603.aspx
[解决办法]
OVERLAPPED ov;
memset(&ov,0,sizeof(ov));
ov.hEvent = CreateEvent( 0,true,0,0);
DWORD dwBytesWritten = 0;
int iRet = WriteFile (m_hFile,m_buf,m_len,&dwBytesWritten ,&ov);
//m_hFile文件句柄,m_buf缓冲区,m_len长度

if ( iRet == 0 )
{
WaitForSingleObject(ov.hEvent ,INFINITE);
}
CloseHandle(ov.hEvent);
[解决办法]
OVERLAPPED ol;
memset(&ol, 0, sizeof(OVERLAPPED));
//设置要写文件的位置
int nPos = ::SetFilePointer(hFile, nWritePos, NULL, FILE_BEGIN);
ol.Offset = nPos;
BOOL bRet = ::WriteFile(hFile, pData, nByteToWrite, &dwWritten, &ol);
if(!bRet)
{
DWORD dwError = GetLastError();
if(dwError == ERROR_IO_PENDING)
{
//IO端口被占用就继续等待
::GetOverlappedResult(hFile, &ol, &dwWritten, TRUE);
}
}

读书人网 >VC/MFC

热点推荐