实战经验:通过NotifyAddrChange侦测网络变化( 二 )

我们先来看函数原型:

DWORD NotifyAddrChange(

PHANDLE Handle

LPOVERLAPPED overlapped

);

参数:

Handle: 这里需要提供一个指向HANDLE的指针 , 当函数成功执行后 , 此指针将指向一个文件句柄 , 我们可以使用这个句柄来调用GetOverlappedResult来获取重叠I/O操作的详细信息 。

overlapped:一个指向OVERLAPPED结构体的指针 , 此结构体主要包含了重叠I/O的信息 。

从以上两个参数可以看出 , NotifyAddrChange这个函数支持异步操作 , 也即重叠I/O操作 。

重叠I/O

在Win32 API层面 , 某些涉及I/O的函数的执行模式可以是同步的 , 也可以是异步的 , 比如WriteFile , ReadFile DeviceIoControl 。

当一个函数以同步的方式执行时 , 它会一直等待I/O操作执行完成 , 也即 , 调用这个函数的线程会阻塞 。

推荐阅读