[Windows] Windows系统编程笔记(3)

所有API的官方路径:

https://docs.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapcreate

#1 ============== Windows服务 ==============


#2 ============== 异步输入/输出与完成端口 ==============


重叠I/O :线程发出 读/写或者其他I/O操作命令后继续执行。当线程需要I/O结果才能
继续时,它要么等待文件句柄,要么等待在ReadFile/WriteFile重叠结构中指定的一个事件

带有回调函数的重叠I/O : 当I/O完成后自动执行回调函数。

不是说重叠I/O会一致阻塞,我们可以不尝试操作文件句柄,这样就不会被投入等待,但是我们
还是要等待某个事件来通知我们I/O已完成。这其实没啥用,而带有回调的I/O就不一样了,我们
可以随便干自己的事情,当I/O操作完成后回调函数会被立刻调用,这样我们就不需要等待哪个事件
通知我们I/O已经完成。

APC 和 带有回调的重叠I/O很相似。

重叠I/O不能用于匿名管道。

所谓重叠 I/O 其实就是指在调用 I/O 函数的时候指定了 overlapped 标志,这个标志等同于
本次 I/O 操作为非阻塞调用。如果设置了回调函数,那么I/O完成后会执行回调函数,如果没有设置
,那么需要自行检测一个 overlapped 结构中的一个事件是否触发了。

overlapped结构中的event的动作流程:当程序尽心了一次I/O调用时此事件会被立刻复位(设置为未传信状态),
当I/O操作完成时,该事件会被传信且 “ 一直池需要 另外一个I/O 操作使用它 ”。 
也就是说,调用了带overlapped的ReadFileEx后,Event会被重置,然后立刻返回,当准备读完成后,Event会
被触发,如果我们想要读数据,正确的操作时先waitforsingleobject event,得到event后再调用一次Read操作。
其实第一次读相当于注册一个读操作给内核,当内核完成以后通知调用线程在读一次,这次读到的就是实际的数据,
第一次读会返回失败,但是错误码是IO PENDING,鉴于第一次读返回失败,其实从编码角度看也就是进行了一次读操作。

  需要注意:overlapped中的event必须是手动复位模式

注意:1)一个overlapped结构尽量只用于一个I/O操作,不要复用此结构
      2)overlapped离开作用于后会自动释放,因此需要处理closehandle其中的event(真麻烦)


如果某个重叠I/O动作非常耗时间,那么可以通过CancelIoEx来取消这个重叠IO

五个“可报警的”等待函数:
1)WaitForSingleObjectEx
2)WaitForMultipleObjectsEx
3)SleepEx
4)SignalObjectAndWait
5)MsgWaitForMultipleObjectsEx


#3 ============== Windows对象的安全 ==============

几乎任何使用CreateXXXX 系统调用创建的对象都有安全属性参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值