PAGE / NUMPAGES
结构体使用多级指针
应用场景:线程池处理多线程任务
实现:c语言版
说明:
涉及到线程池的都没有在本例中给出代码
线程池代码不方便给出,读者可以自行设计
重点给出一个设计思路,方便传参和减少代码量
本代码不能编译运行
水平有限,可能有更好的方式,本文档只做学习记录
代码:
//Test.C begin...
#include
#include
#include
//定义发送缓冲区大小
#define BUFFER_SIZE 1024
//定义全局线程池变量
TpThreadPool *pTp; //注意:本例子未作实现
//宏定义消息类型
#define GET_USER 1 //获取用户类型
#define SEND_MSG 2 //发送消息类型
//线程执行函数模版
typedef void (*process_job)(void *arg);
//线程执行函数实现
void proc_fun(void *arg)
{
AllPara *ap = (AllPara *)arg;
int protoID = ap->id;
switch(protoID)
{
case 1:
int uID = ((GetUser *)(ap->realPara))->userID;
//any deal
break;
case 2:
int uID = ((SendMsg *)(ap->realPara))->userID;
char msg[BUFFER_SIZE];
strcpy(msg, ((SendMsg *)(ap->realPara))->userID);]
//any deal
break;
}
}
typedef struct all_para
{
int id;//id决定*realPara的转换类型
void *realPara;//这里因为需要所以必须是void型
}AllPara;
//获取用户
typedef struct get_user
{
int userID;
}GetUser;
//发送消息
typedef struct send_msg
{
int userID;
char msg[BUFFER_SIZE];
}SendMsg;
//主函数
int main()
{
//创建线程池
pTp= tp_create(10, THD_NUM); //注意:本例子未作实现
//初始化线程池
tp_init(pTp); //注意:本例子未作实现
AllPara *ap1 = (AllPara *)malloc(sizeof(AllPara));
GetUser *gu = (GetUser *)malloc(sizeof(GetUser));
ap1->id = 1; //1 宏定义为获取用户协议号
gu->userID = 223345;//user id 为
ap1->realPara = (void *)gu;
tp_process_job(pTp, proc_fun, ap1); //把任务置入线程池,本例不做实现个人收集整理 勿做商业用途
AllPara *ap2 = (AllPara *)malloc(sizeof(AllPara));
SendMsg *sm = (SendMsg *)malloc(sizeof(SendMsg));
ap2->id = 2; //1 宏定义为获取用户协议号
sm->userID = 654123;//给用户发送消息
strcpy(sm->msg, "你好,我们一起去郊游吧!");
ap2->realPara = (void *)sm;
tp_process_job(pTp, proc_fun, ap2); //把任务置入线程池,本例不做实现个人收集整理 勿做商业用途
return 0;
}
//Test.C end !!!
对于本例程不能编译运行,请读者勿喷,本文档重在给出一个线程池直线多任务(任务类型不同)场景的下的二级结构体指针传参设计思路。个人收集整理 勿做商业用途