怎么用c语言写状态机呀请举例说明

复合材料是什么2023-05-05  18

c语言写状态机之前:

1、确定一共有多少种状态,这里的状态有开和关,细分还有say thankyou 和警告

2、确定状态之间的迁移条件

如果按照四种状态:开、关、说谢谢、警告,那么这四种状态之前的迁移条件很明显了

分两个函数:

1、检查是否需要迁移状态;

2、迁移状态

遍历各种状态检查是否有状态需要发生迁移一般用一个switch将各种状态列出,然后在各种状态里面用if检查是否需要迁移状态,如果需要迁移,做好标记

再次遍历各种状态,检查哪些状态做了标记,迁移到新状态,并做相应的操作,比如进入关的时候,做关门动作。

典型的状态机结构:

enum { state_A, state_B, state_C } state = state_A;

while(1)

{

switch ( state )

{

case state_A:

if ( event_A ) // 这里也可以用switch

{

action_1(); // 在某状态下发生某事件执行某个动作,并转入下个状态

state = state_B;

}

else if ( event_B )

{

}

else

{

}

break;

case state_B:

}

}

最近做根据网段ip自动搜索网元、创建、上载(极为耗时)的功能(网管的概念,不重要),需要达到的效果是后台进行到任意一个状态时,前台都可以感知到。

核心任务有四个:

一、异步

即前台下发接口后不会干扰其他的操作,立即返回,具体的过程交给线程解决即可。

二、状态机

重点1:单例,这个状态机要求是单例的

重点2:具体的状态描述,包括上一个任务数、当前状态、当前已完成任务数等

重点3:数据缓存和重入的问题

三、前后台交互

最初的方案是定义一个restful接口前台进行轮询,后面发现太傻了这样,已经有成熟的协议能够保持长链接——webSocket。其优点在于,后台决定消息是否上报,前台监听即可。

webSocket最经典的项目是聊天室,它可以保证其实时聊天。

四、多线程上载

由于这个操作及其耗时,且可能有多个网元上载,一个一个串行太耗时了。需要多线程的去做。

以上就是关于怎么用c语言写状态机呀请举例说明全部的内容,包括:怎么用c语言写状态机呀请举例说明、webSocket、单例、多线程、状态机、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3798724.html

最新回复(0)