创建多个进程,同时完成任务
task.c
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
#include <sys/wait.h>
int create_process_tasks(Task_fun_t tasks[],int tsak_cnt)
{
pid_t pid;
int i = 0;
for(i = 0;i < 4;i++)
{
pid = fork();
if(pid > 0)
{
}
else if(0 == pid)
{
break;
}
}
if(pid > 0)
{
return 0;
}
else if(0 == pid)
{
tasks[i]();
}
else
{
return -1;
}
return 0;
}
void destroy_task(int tasks_cnt)
{
int i;
for(i = 0;i < tasks_cnt;i++)
{
wait(NULL);
}
}
task.h
#ifndef __TASK_H__
#define __TASK_H__
typedef void(*Task_fun_t)(void);//将void (*)(void)函数指针重命名为---->Tsak_fun_t
extern int create_process_tasks(Task_fun_t tasks[],int tsak_cnt);
extern void destroy_task(int task_cnt);
#endif
main.c
#include<stdio.h>
#include"task.h"
int main(int argc, char const *argv[])
{
//void (*pfun_arg)(void)[] = {main_ctl, get_cmd, exec_cmd, get_pic, send_pic};
Task_fun_t tasks[] = {main_ctl,get_cmd,exec_cmd,get_pic,send_pic};
//函数指针数组里装的是调用者需要执行任务的函数的函数名
//调用者可自定义函数所需要实现的功能
create_process_tasks(tasks,sizeof(tasks) / sizeof(tasks[0]));//创建多线程
destroy_task(sizeof(tasks,sizeof(tasks[0])));//回收线程
return 0;
}