C语言触发器模式


触发器模式是在条件满足或不满足时,触发特定动作的模式。

用于周期性处理过程中,根据事件触发时机,进行事件响应处理。


定义触发器结构:

typedef enum
{
	tFalse = 0,
	tTrue = 1,
} bool_t;

typedef struct
{
	int state;
} trigger_t;

void init_trigger(trigger_t *t, int initState)
{
	t->state = initState;
}

bool_t touch_trigger(trigger_t *t, int newState)
{
	bool_t changed = (t->state != newState) ? tTrue : tFalse;
	t->state = newState;
	return (changed);
}


通过在周期性处理中,模拟数据输入和响应行为:

例如,在特定条件满足/不满足时、触发特定动作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int i, state;
	const int speeds[] = { 0, 10, 22, 30, 23, 10, 15, -1 };
	trigger_t t;

	init_trigger(&t, 0);
	for(i = 0; speeds[i] != -1; i++)
	{
		printf("SIGNAL[%d] = %2d", i, speeds[i]);

		state = (speeds[i] > 20) ? tTrue : tFalse;
		printf(" --> CONDITION:%s", state ? "TRUE " : "FALSE");

		if(touch_trigger(&t, state))
		{
			if(state)
			{
				printf(" --> ACTION:BEEP ON");
			}
			else
			{
				printf(" --> ACTION:BEEP OFF");
			}
		}

		printf("\n");
	}

	return 0;
}

程序运行结果,可以看到在车速高于20km/h时触发报警,低于20时关闭报警。

SIGNAL[0] =  0 --> CONDITION:FALSE
SIGNAL[1] = 10 --> CONDITION:FALSE
SIGNAL[2] = 22 --> CONDITION:TRUE  --> ACTION:BEEP ON
SIGNAL[3] = 30 --> CONDITION:TRUE
SIGNAL[4] = 23 --> CONDITION:TRUE
SIGNAL[5] = 10 --> CONDITION:FALSE --> ACTION:BEEP OFF
SIGNAL[6] = 15 --> CONDITION:FALSE


例如,在特定状态改变时、触发特定动作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int i, state;
	const char gears[] = { 'P', 'P', 'R', 'N', 'N', 'N', 'D', 'D', 0 };
	trigger_t t;

	init_trigger(&t, 'P');
	for(i = 0; gears[i] != 0; i++)
	{
		printf("SIGNAL[%d] = %c", i, gears[i]);

		state = gears[i];
		printf(" --> STATE:%c", state);

		if(touch_trigger(&t, state))
		{
			printf(" --> ACTION:gear changed");
		}

		printf("\n");
	}

	return 0;
}

程序运行结果,可以看到状态改变时触发提示。

SIGNAL[0] = P --> STATE:P
SIGNAL[1] = P --> STATE:P
SIGNAL[2] = R --> STATE:R --> ACTION:gear changed
SIGNAL[3] = N --> STATE:N --> ACTION:gear changed
SIGNAL[4] = N --> STATE:N
SIGNAL[5] = N --> STATE:N
SIGNAL[6] = D --> STATE:D --> ACTION:gear changed
SIGNAL[7] = D --> STATE:D


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值