生产消息,处理消息
#include #include #define #define #define #define void main() { unsigned unsigned unsigned unsigned while (1) { RandTaskGene1 = rand(); RandTaskGene1 %= 2; if (RandTaskGene1) //产生消息 { message1 = MSG_TASK1_RUN; } else { message1 = MSG_TASK1_STOP; } RandTaskGene2 = rand(); if (RandTaskGene2 > 1000) { message2 = MSG_TASK2_RUN; } else { message2 = MSG_TASK2_STOP; } if(message1)//检索消息 { switch(message1) { case printf(“消息1事件1:%d\n”, RandTaskGene1); break; case printf(“消息1事件2:%d\n”, RandTaskGene1); break; } } if (message2)//检索消息 { switch (message2) { case printf(“消息2事件1:%d\n”, RandTaskGene2); break; case printf(“消息2事件2:%d\n”, RandTaskGene2); break; } } } } |
消息进入队列处理
#include #include typedef //无消息 #define #define #define #define #define /*消息处理机制定义*/ #define unsigned unsigned unsigned //消息发布 void PutMessage(message { Messages[MessageTail] = m; if(++MessageTail>=QUEUELEN) { MessageTail = 0; } } //取消息 message GetMessage() { message m = Messages[MessageHead]; if (++MessageHead>=QUEUELEN) { MessageHead = 0; } return m; } //判断队列是否为空 bool QueueEmptyOrError() { return (MessageHead == MessageTail) ? 1 : 0; } void main() { unsigned while (1) { RandTaskGene = rand(); RandTaskGene %= 2; if (RandTaskGene) //产生消息 { PutMessage( MSG_TASK1_RUN); } else { PutMessage( MSG_TASK1_STOP); } RandTaskGene = rand(); if (RandTaskGene > 1000) { PutMessage( MSG_TASK2_RUN); } else { PutMessage(MSG_TASK2_STOP); } while(!QueueEmptyOrError())//一次性处理消息 { switch (GetMessage()) { case printf(“消息1事件1:%d\n”, MSG_TASK1_RUN); break; case printf(“消息1事件2:%d\n”, MSG_TASK1_STOP); break; case printf(“消息2事件1:%d\n”, MSG_TASK2_RUN); break; case printf(“消息2事件1:%d\n”, MSG_TASK2_STOP); break; } } } } |