해결된 질문
작성
·
264
0
안녕하세요 선생님
DWORD dwRead;
OVERLAPPED aOl[3] = { 0 };
HANDLE aEvt[3] = { 0 };
//세 번의 비동기 쓰기 완료를 확인하기 위한 이벤트 객체를 생성한다.
for (int i = 0; i < 3; ++i)
{
aEvt[i] = ::CreateEvent(NULL, FALSE, FALSE, NULL);
aOl[i].hEvent = aEvt[i];
}
//비동기 쓰기가 시작될 지점을 기술한다.
//두 번째 쓰기는 세 번째 쓰기보다 나중에 이루어질 가능성이 높다.
aOl[0].Offset = 0; //파일의 시작.
aOl[1].Offset = 1024 * 1024 * 128; //5MB
aOl[2].Offset = 16; //16바이트
//세 번의 비동기 쓰기를 순차적으로 수행한다.
for (int i = 0; i < 3; ++i)
{
printf("%d번째 중첩된 쓰기 시도.\n", i);
::WriteFile(hFile, "0123456789", 10, &dwRead, &aOl[i]);
//정상적인 경우 쓰기 시도는 지연(보류)된다!
if (::GetLastError() != ERROR_IO_PENDING)
exit(0);
}
여기서 dwRead가 얼마나 쓰였는지 확인하는 바이트수를 나타낸다고 하는데 만약 쓰고 싶다면
//세 번의 비동기 쓰기가 완료되기를 대기한다.
DWORD dwResult = 0;
for (int i = 0; i < 3; ++i)
{
dwResult = ::WaitForMultipleObjects(3, aEvt, FALSE, INFINITE);
printf("-> %d번째 쓰기 완료.\n", dwResult - WAIT_OBJECT_0);
}
sizeof("0123456789") == dwRead;
이런식으로 마지막에 비교할때 쓰이는건가요?
답변 1
0
마지막 비교는 잘못된 비교 입니다. sizeof("문자열")은 sizeof(const char*)와 같습니다. 64비트 환경이라면 8입니다. 참고하시기 바랍니다. :)