1 前面说到 GetOverlappedResult的bWait含义

GetOverlappedResult的bWait含义表示是否需要等待,如果IO还处于PENDING状态,内部大概实现是这样

  hObject = lpOverlapped->hEvent ? lpOverlapped->hEvent : hFile;
  WaitStatus = WaitForSingleObject(hObject, INFINITE);

为啥OVERLAPPED里面要有hEvent 这个字段,干嘛用的?假设这样的场景,打开一个文件句柄,发起多次异步的读请求,那请求完成如何知道是对应哪次读请求?通过hFile来区分显然不行了,这种情况下,需要为每次IO请求来分配一个事件,当一次IO完成时,这个事件会设置成受信状态。因为WaitForMultipleObjectsEx最多只能传递64个句柄,所以这种方式同时能处理的请求只限制在64个

相关文章:

  • 2021-05-30
  • 2022-12-23
  • 2021-07-08
  • 2022-12-23
  • 2021-07-05
  • 2021-12-01
  • 2022-12-23
  • 2021-08-06
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2022-02-07
  • 2021-11-05
  • 2021-09-07
相关资源
相似解决方案