📄 hear.h
字号:
#include <vxWorks.h>
#include <sysLib.h>
#include <stdioLib.h>
#include <msgQLib.h>
#define MAX_MESSAGES 5
#define MAX_MESSAGE_LENGTH 20
MSG_Q_ID msgCustomer;
/*定义一个消息结构体,用于向消息队列发送和从消息队列接收顾客的ID号*/
struct msg
{
int CustomerID;
};
int currentCustomerID=0; /*表示当前正在理发的顾客的ID */
int CustomerID=0; /* 表示光临的顾客的ID */
/*理发师的任务*/
void Barber()
{
struct msg CustomerIDbuf;
FOREVER
{
printf("*********************************************\n");
/*从消息队列接收消息,即从排队的顾客中挑选最前面的顾客进行服务 */
/*如果消息队列为空,表示没有顾客在等待 */
/*服务完一位顾客后就马上为第一位等待的顾客服务,并将相应的信息打印输出 */
/*假设一位顾客服务的时间为200 ticks */
if(msgQReceive(msgCustomer,(char*)&CustomerIDbuf,sizeof(struct msg),NO_WAIT)==ERROR)
{ printf("No Customer here!\n"); }
else
{
if(currentCustomerID!=0)
{printf("Customer %d left and ",currentCustomerID);}
currentCustomerID=CustomerIDbuf.CustomerID;
printf("the current served Customer is Customer %d\n",CustomerIDbuf.CustomerID);
}
printf("*********************************************\n");
taskDelay(200);
}
}
/*顾客的任务*/
void Customer()
{
struct msg msgCustomerID;
FOREVER
{
/*顾客光临的时间间隔是随机的 */
/*每来一位新顾客就使CustomerID加1,同时打印输出 */
/*把进入排队的顾客的ID号作为一个消息发送到消息队列 */
/*计算出消息队列里面的消息数目,即等待的顾客数目 */
taskDelay((rand())%500);
printf("*********************************************\n");
printf("Customer %d is coming\n",++CustomerID);
msgCustomerID.CustomerID=CustomerID;
if(msgQSend(msgCustomer,(char*)&msgCustomerID,sizeof(struct msg),NO_WAIT,0)==ERROR)
printf("a new Customer came but the waiting room was full,so he left\n");
printf("%d Customers are waiting\n",msgQNumMsgs(msgCustomer));
printf("*********************************************\n");
}
}
/*主程序,创建了一个消息队列,同时创建了Barber和Customer两个任务 */
int go()
{
msgCustomer=msgQCreate(MAX_MESSAGES,MAX_MESSAGE_LENGTH,MSG_Q_FIFO);
taskSpawn("Barber",105,0,5000,Barber,0,0,0,0,0,0,0,0,0,0);
taskSpawn("Customer",105,0,5000,Customer,0,0,0,0,0,0,0,0,0,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -