以消息为导向的有限状态机理念Windows程序设计笔记(汇编) (4) 高效检测状态机某一状态的方法

发布于 2021-08-25  37 次阅读


背景

这里还是一个多线程的例子,感觉笔者在多线程的知识树上越走越远了....看完主要内容之后得赶紧回到主路上。

如果是单线程状态机,状态是不需要检测的,因为状态切换的时机是确定的

对于多线程的状态机,检测其他线程的状态,比较傻的办法就是一个死循环然后switch case,这样会占用大量的CPU时间片,最要命的是即使线程挂起也会消耗时间片,即使用户不进行任何操作,状态不发生任何变化,依旧消耗时间片

因此while true在这时并不是一个好做法

正文

首先底层原理还是委托的分发和回收与触发回调

通过创建事件分支节点,来建立监听点(listen),再WaitForSingleObject与switch case配合,建立分支

顺便补一个事件的知识点

置位和复位

置位就是触发,复位就是等待触发,可以理解为一个抓动物的陷阱

还有一个自动复位机制,文档上很详细,需要抄的时候再说

补充

WaitForSingleObject 函数可以做到内陷+互斥锁,而互斥锁主要是通过一系列硬件实现的