Если произошла ошибка, анализируем ее
ovRead.OffsetHigh = 0;
ovRead.hEvent = NULL;
// Инициализация структуры для асинхронной записи
ovWrite.Offset = 0;
ovWrite.OffsetHigh = 0;
ovWrite.hEvent = NULL;
// Выполняем перекодировку файла в цикле
while(TRUE)
{
// Запускаем операцию асинхронного чтения
bResult = ReadFile(hSrcFile, cBuf, sizeof(cBuf),
&dwBytesRead, &ovRead);
// Проверяем результат запуска
if(!bResult)
{
// Если произошла ошибка, анализируем ее код
switch (dwError = GetLastError())
{
// При достижении конца файла завершаем работу
// цикла и возвращаемся из функции
case ERROR_HANDLE_EOF:
{
return;
}
// Операция чтения запущена и еще выполняется
case ERROR_IO_PENDING:
{
// Здесь вы можете разместить вызов функции,
// которая будет выполняться параллельно с
// только что запущенной операцией чтения
//
// IdleWork();
// Перед тем как перейти к перекодировке
// считанного из файла блока, необходимо
// дождаться завершения операции
WaitForSingleObject(hSrcFile, INFINITE);
// Получаем результат выполнения асинхронной
// операции чтения
bResult = GetOverlappedResult(hSrcFile, &ovRead,
&dwBytesRead, FALSE);
if(!bResult)
{
switch (dwError = GetLastError())
{
// При достижении конца файла завершаем работу
// цикла и возвращаемся из функции
case ERROR_HANDLE_EOF:
{
return;
}
default:
break;
}
}
}
default:
break;
}
}
// Получаем результат выполнения асинхронной
// операции чтения
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий