关于DeviceIoControl阻塞的疑问
我有执行一个线程,如下
DWORD WINAPI Thread_Main(LPVOID lpParameter)
{
while(条件)
{
// .....................
DeviceIoControl(参数...);
//......................
}
return 0;
}
这个线程循环一次大概需要400毫秒;
后来发现,主要因为DeviceIoControl是阻塞的,花费了将近300毫秒,
于是作如下修改;
DWORD WINAPI Thread_Main(LPVOID lpParameter)
{
while(条件)
{
// .....................
// 创建一个线程;
CloseHandle(
CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)Thread_IOCtrl,
LPVOID((参数), 0, NULL )
);
//......................
}
return 0;
}
DWORD WINAPI Thread_IOCtrl(LPVOID) //
{
DeviceIoControl(参数...);
}
这样以来,我以为主线程的速度会大大提高,结果速度还是和以前一样慢,而如果我在Thread_IOCtrl线程中不执行DeviceIoControl,主线程的执行速度就大大提高;
我非常不解,难道DeviceIoControl把主线也阻塞了?
//==============================================================================
另外我也尝试了在CreateFile 时增加了 FILE_FLAG_OVERLAPPED 标志;
之后在ReadFile时确实是非阻塞的了, 但是在调用DeviceIoControl时还是一样慢;
...
还请了解原委的大侠不吝赐教.