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、单例、多线程、状态机、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!