아래 코드를 작성했습니다. 이 메서드를 호출하여 3 개의 개별 스레드를 사용하여 3 개의 다른 하드 디스크에 기록합니다. CancelIo 호출 중 하나가 실패합니다 (false를 반환합니다).왜 CancelIo 함수가 실패합니까?
디스크가 정상이라고 가정합니다 (하드웨어는 문제가 없습니다).
어떻게 될 수 있습니까? 더 뛰어난 IO를이없는 경우
(나는 그것이 다른 디스크에 다시 발생 참조 디스크를 변경 한 후.)
public void foo(byte[] bufferToWrite)
{
unsafe
{
NativeOverlapped overlapped = new NativeOverlapped()
{
EventHandle = eventHandle,
OffsetLow = (int)(s & 0xffffffff),
OffsetHigh = (int)(s >> 32 & 0xffffffff)
};
GCHandle gch = GCHandle.Alloc(bufferToWrite, GCHandleType.Pinned);
IntPtr ptr = new IntPtr((void*)gch.AddrOfPinnedObject());
WriteFile(handle, ptr, length, ref bytesWritten, &overlapped);
dwResult = WaitForSingleObject(EventHandle, 30000);
if(dwResult== TIME_OUT)
{
Debug.Assert(CancelIo (handle));
}
}
}
실수로 보입니다. if (bResult == ERROR_SUCCESS == || bResult == ERROR_IO_PENDING)'?? – hmjd
@ChrisF, 그저 내 생각에 ... – hmjd
남자 ... 그냥 버그 맞춤법 이었어 .. 초점을 유지할 수있어 :) – Yanshof