c语言状态机例程

通过状态机的状态不断切换跳转,在线程处理的时候

#include <stdio.h>
 
void stopPlayer();
void pausePlayer();
void resumePlayer();
void startPlayer();
//按键的动作类型
typedef enum {
    EV_STOP,
    EV_PLAY_PAUSE
}EventCode;
 
//MP3的状态
enum{
  ST_IDLE,
  ST_PLAY,
  ST_PAUSE
};
 
//MP3当前状态
char state;
 
//MP3状态初始化
void init()
{
  state = ST_IDLE;
}
 
//状态机处理MP3的过程变化
void onEvent(EventCode ec)
{
  switch (state)
  {
  case ST_IDLE:
        if(EV_PLAY_PAUSE == ec)
          startPlayer();
        break;
  case ST_PLAY:
        if(EV_STOP == ec)
          stopPlayer();
        else if(EV_PLAY_PAUSE == ec)
          pausePlayer();
        break;
  case ST_PAUSE:
        if(EV_STOP == ec)
          stopPlayer();
        else if(EV_PLAY_PAUSE == ec)
          resumePlayer();
        break;
  default:
        break;
  }
}
 
void stopPlayer()
{
  state = ST_IDLE;
  printf("停止播放音乐\n");
}
 
void pausePlayer()
{
  state = ST_PAUSE;
  printf("暂停播放音乐\n");
}
 
void resumePlayer()
{
  state = ST_PLAY;
  printf("恢复播放音乐\n");
}
 
void startPlayer()
{
  state = ST_PLAY;
  printf("开始播放音乐\n");
}
//主程序实现MP3的播放控制
void main()
{
  init();
  onEvent(EV_PLAY_PAUSE);//播放
  onEvent(EV_PLAY_PAUSE);//暂停
  onEvent(EV_PLAY_PAUSE);//继续播放
  onEvent(EV_STOP);      //停止
}
 

参考链接:https://blog.csdn.net/qq_35579835/article/details/106536745

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值