【发布时间】:2012-05-03 20:48:14
【问题描述】:
我写了下面的代码。我正在调用此方法以使用三个单独的线程写入三个不同的硬盘。 CancelIo 调用之一失败(返回 false)。
我假设磁盘没问题(硬件没问题)。
这怎么可能?
(更换磁盘后,我看到它在另一个磁盘上再次发生。)
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 )?? -
@ChrisF,我只是在想我自己......
-
伙计们......这只是拼写错误......让我们保持专注:)
-
@Yanshof - 很可能是这样,但你永远不知道。
-
你是什么意思我从来不知道?我在运行时(在调试中)看到我得到了 assart
标签: c# .net winapi visual-c++ cancelio