/*信号
* :任务A向任务B发送信号
* */
#include<stdio.h>
#include<ioLib.h>
#include<taskLib.h>
#include<wdLib.h>
#include<unistd.h>
#include<sigLib.h>
#define TASK_PRIORITY_A 130
#define TASK_PRIORITY_B 130
#define STACK_SIZE 225
int taskId_A, taskId_B;
/*定义消息队列*/
int pipeId;
/*定义两个Task*/
void taskA(void);
void taskB(void);
int taskDemo() {
/*创建任务:taskSpawn创建并激活任务*/
taskId_A=taskSpawn("taskA", TASK_PRIORITY_A, VX_FP_TASK, STACK_SIZE,
(FUNCPTR)taskA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
taskId_B=taskSpawn("taskB", TASK_PRIORITY_B, VX_FP_TASK, STACK_SIZE,
(FUNCPTR)taskB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (taskId_A==ERROR)
printf("taskA taskSpawn() failed!\n");
if (taskId_B==ERROR)
printf("taskB taskSpawn() failed!\n");
}
/*信号处理函数*/
void sigHander(int sig)
{
if(sig==SIGUSR1)
printf("TaskB get the signal!\n");
}
void taskA() {
sleep(1);
/*发送信号*/
if(kill(taskId_B,SIGUSR1)==ERROR)
printErr("kill() error!:%d\n",errno);
printf("TaskA send signal!\n");
}
void taskB() {
/*将信号处理程序与信号关联*/
signal(SIGUSR1,sigHander);
/*等待信号*/
pause();
}
运行结果
TaskA send signal!
TaskB get the signal!