- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
结构体使用多级指针应用场景:线程池处理多线程任务实现:c语言版说明:涉及到线程池的都没有在本例中给出代码线程池代码不方便给出,读者可以自行设计重点给出一个设计思路,方便传参和减少代码量本代码不能编译运行水平有限,可能有更好的方式,本文档只做学习记录代码://Test.C begin...#includestdio.h#includestring.h#includemalloc.h//定义发送缓冲区大小#define BUFFER_SIZE 1024//定义全局线程池变量TpThreadPool *pTp; //注意:本例子未作实现//宏定义消息类型#define GET_USER 1 //获取用户类型#define SEND_MSG 2 //发送消息类型//线程执行函数模版typedefvoid (*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 dealbreak;case 2:int uID = ((SendMsg *)(ap-realPara))-userID;char msg[BUFFER_SIZE];strcpy(msg, ((SendMsg *)(ap-realPara))-userID);]//any dealbreak;}}typedefstruct all_para{int id;//id决定*realPara的转换类型void *realPara;//这里因为需要所以必须是void型}AllPara;//获取用户typedefstruct get_user{int userID;}GetUser;//发送消息typedefstruct 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 !!!对于本例程不能编译运行,请读者勿喷,本文档重在给出一个线程池直线多任务(任务类型不同)场景的下的二级结构体指针传参设计思路。
文档评论(0)