用函数指针数组简化switch-case跳转二维事件复杂度

来源:互联网 发布:增长率算法 编辑:程序博客网 时间:2024/06/08 06:47

在多任务程序中,多个任务之间采用消息队列来传递信息和交互,如果在任务循环中采用如下的跳转来操作,那么就会增加计算时间:

while(1){     state = get_message();     switch(state)     {          case RUN:                  do_something();                  break;          case STOP:                  do_anotherthing();                   break;           ......      }}

另一种做法,是用二维函数指针数组,列出所有处理函数对应的跳转条件,采用回调函数实现,采用函数指针,减少了计算case跳转的比较时间,所以可以提高速度,缺点是占用比较多的存储空间。采用何种方式来表达计算需求,取决于对速度还是空间占用的指标要求。

如下代码结构:

typedef  void  (*pfunc)(void );pfunc  state_list[MAX_EVENT][MAX_STATE_NUM] = {                   /*state1*/  /*state2*/ .../*event1*/    function1,   function2   /*event2*/    function3,   function4
...}void function1() {...};void function2() {...};

...

	
				
		
原创粉丝点击