1.在main.c中SDL_main()中SceneLoad();前添加非界面函数(init)
2.在init函数中开启消息队列
mqID = mq_open("anonymQueue", O_CREAT | O_NONBLOCK, 0666, &qattr);
其中各参数如下:
typedef struct{
int Type;
char parameter[10];
int parameterNum;
}STRUCT_UI_EVE;
static mqd_t UiInfoQueue = -1;
mqd_t mqID;
STRUCT_UI_EVE ev_send;
ev_send.Type = 123;
struct mq_attr qattr;
qattr.mq_flags = 0;
qattr.mq_maxmsg = 10;
qattr.mq_msgsize = sizeof(STRUCT_UI_EVE);
注意:对列名在linux2.6下要在最前面加/,&qattr可以为NULL,
但在ITE SDK下不适用(&qattr可以写0)
3.在要发送的函数中发送事件
mq_send(mqID, (const char *)&ev_send, sizeof(STRUCT_UI_EVE), 0)
4.在scene.c中,sceneRun()中ituSceneUpdate前添加接受已定义事件函数
5.在接收自定义事件函数中接收队列事件
mqd_t mqID = mq_open("anonymQueue", O_RDONLY | O_NONBLOCK);
if (mqID == -1)
printf("mq_open error\n");
STRUCT_UI_EVE ev_rece;
mq_receive(mqID, (char *)&ev_rece, sizeof(STRUCT_UI_EVE), 0);
6.此时自定义事件就被发送给界面了,只需要在GUIdesigned中添加对应的action