c语言四级指针使用,c语言使用多级结构体指针.docx

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 !!!

对于本例程不能编译运行,请读者勿喷,本文档重在给出一个线程池直线多任务(任务类型不同)场景的下的二级结构体指针传参设计思路。个人收集整理 勿做商业用途

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值