728x90
비동기로 파일 입/출력을 하기 위해서는 Overlapped 를 사용해야 합니다
간단한 사용법을 소개합니다
우선 헤더 파일에 변수 선언을 진행합니다
OVERLAPPED m_overlapped;
이후 초기화 및 Event 초기화를 진행합니다
MyClass()
{
memset(&m_overlapped, NULL, sizeof(m_overlapped));
m_overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
}
소멸자에서도 처리해 줍니다
~MyClass()
{
SetEvent(m_overlapped.hEvent);
CloseHandle(m_overlapped.hEvent);
m_overlapped.hEvent = NULL;
}
그리고 마지막으로 아래와 같이 정의하면 파일 쓰기가 됩니다
BOOL MyClass::FileWriteFunc(BYTE *pData, DWORD dwSize)
{
LARGE_INTEGER liPos
HANDLE hFile = CreateFile(_T("파일 위치"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
//파일 열기 실패
return FALSE;
}
//파일 쓰려는곳의 위치
liPos.QuadPart = 0;
m_overlapped.Offset = liPos.LowPart;
m_overlapped.OffsetHigh = liPos.HighPart;
if(WriteFile(hFile, pData, dwSize, NULL, &m_overlapped) == FALSE)
{
if(GetLastError() != ERROR_IO_PENDING)
{
//정상 처리 실패
CloseHandle(hFile);
return FALSE;
}
}
Sleep(0);
if(WaitForSingleObject(m_overlapped.hEvent, INFINITE) != WAIT_OBJECT_0)
{
//정상 처리 오류
CloseHandle(hFile);
return FALSE;
}
CloseHandle(hFile);
return TRUE;
}
읽기도 위와 같은 방식으로 처리 하면됩니다
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
728x90
반응형
'Application > MFC' 카테고리의 다른 글
[MFC] 디스크 Offline / Online (0) | 2023.03.22 |
---|---|
[MFC] 볼륨으로 디스크 번호 가져오기 (Get Volume Disk Number) (0) | 2023.03.21 |
[MFC] Static 글자 색 및 배경 색 변경 (0) | 2023.03.14 |
[MFC] CMD로 명령어 실행 하기 (0) | 2023.03.13 |
[MFC] 난수 생성하기(랜덤 값 생성) (0) | 2023.03.08 |