pvMsglq>greadg->gread=((q->gread+1)%TIMEWEIGHT_TASKQUEUE_SIZE)/*解锁return(pmSg);PushapmSgpacketontoapvMsgpacketqueue@parampisthepmsgtopushontothepacketqueue@paramgisthepacketqueue.W@return0ifsuccessful,-1ifqisfullntTWTMsgSend(TtWTMSg*p,TTWTMSGQUEUE*qintret/if(!TWT_QUEUEFULL(al)iThequeueisntfullsoweaddthenewframeatthecurrentwwritepositionandmovethewritepointer.g->pvMsgla->write]=pg->write=((q->qwrite+1)%TIMEWEIGHTTASKQUEUESIZE;ret=oThestackisfullsowearethrowingawaythisvalue.Keeptrackofthenumberoftimesthishappensg->overflow++ret=-1://*解锁return(ret)**米**米来米***来米*半米*米*半米*米求***半*米米求半**米求半**半求半和*米*//消息分发机制//*算法是//*正常返回0,出错返回-1水米米******水*米*水**米*半*水米米冰半**水水*水米米半米冰水*米水水*水*米水水externintRecToFileMsgProc(T_MSG_REC2FILE*ptMsg);intDispatchMsg(TTWTMSG*ptMsgitif(NULl=ptMsggotoErrRet/*dispatchmsg*/switch(ptMsg->enMsgType)caseTWTPINgPoNgBuffrecRecToFileMsgProcl(TMSG_REC2FE)(pmSg->pMsg);/*处理消息*/destroyMsg(pmSg;/*消毁消息breakdefault.printf("DispatchMsgMsgtypeError!n")break.return0ErrRetprintf("DispatchMsgFail!";return-1./*buffsize*/#defineP|NGPONG_BUFFBSIZE0X20000//10*1024*1024/*10M*/*pingpongbuff*///chargacPINGBUFF[PINGPONGBUFFBSIZE];/*PingBuff*///chargacPONGBUFF[PINGPONG_BUFFBSIZE]*PongBuff*/水米米*********米*水**米*半*水米米水**冰水*水米米半半水半米冰水*米水水*水*米米//*释放pingpongbuff/必然成功//*无返回木***木*水****本**水*水水*水****本水**水水****水水***本***米*水voidDestroyPingPongButt(TPINGPONGBUFFUSEDESptPingPongButt)nLoopif(NULL=ptPingpongbuffreturnfor(nLoop=0;nLooptIngBuffUse[nLoop].pcHeadAddr)free(ptPingPong->tPingBuffUse[nLoop].pcHeadAddr)free(ptPingpongBuff)/初始化pingpongbuff返回pignpongbuff的描述指针//*正常返回0,出错返回-1水水水水水水水水水木水木水水水水水木水木水水水水水水水水本水水水水水水水水水本水水水水水水水水水水水水水TPINGPONGBUFFUSEDESInitPingPongBuff(unsignedintnBuffSizeTPINGPONGBUFFUSEDES*ptBuffDes=NULLintnLoop/*获取buf描述*ifNULL==(ptBuffDes=malloc(sizeof(TPINGPONGBUFFUSEDES))))gotoErrRetmemset(ptBuffDes,0,sizeof(T_PINGPONGBUFFUSE_DES));/*分别初始化ping和pong*/for(nLoop=0;nLooptIngBuffUsenLooppcHeadAddr=mallocnBuffSize))gotoErrRet;ptBuffDes->tIngBuffUselnLoop]nBuffSizenBuffsizeptBuffDes->tPingBuffUse[nLoop].oFfsetptBuffDes->tPingBuffUsenLoop)eUseStatus-=BUFFWRITEABLE;ptBuffDes->eCurUseIDBUFFPINGreturnptBuffDesErrretprintf("lnitPingPongBuffFail!");DestroyIngPongBuff(ptBuffDes)turnnull平**米**米*米***来米米*米*米*半米*米米米来*半米平**米米求*来*半求半来*米求*和*米*/*Resetpingpongbuff//*正常返回0,出错返回-1米米米米水冰米*米米水**米米冰*米水米米米米水米水*水米米来米米x米来米米水冰来来宋来水米来米来冰#defineResetBuffUse(ptBuffuse)ptBuffUse->oFfset0ptBuffUse->eUseStatusBUFFWRITEABLEgenerateafilerecmsg*正常返回消息体的指针,异常返回NULLT_MSG_REC2lGKSenFRMSB(T_BUFF_USE_DES*ptBuffUse,REC_FILE_DESLIST*ptFileListRTMSGREC2FILEKE*ptRFMsg=NULL;if(NULL==(ptRFMsgmalloc(sizeof(T_MSGREC2FILE)returnnUllptRFMsg->ptBuffUseptBuffUseptRFMsg->ptFilelistptFilelist;returnptRFMsg-IMDN开发者社群-imdn.cn"> pvMsglq>greadg->gread=((q->gread+1)%TIMEWEIGHT_TASKQUEUE_SIZE)/*解锁return(pmSg);PushapmSgpacketontoapvMsgpacketqueue@parampisthepmsgtopushontothepacketqueue@paramgisthepacketqueue.W@return0ifsuccessful,-1ifqisfullntTWTMsgSend(TtWTMSg*p,TTWTMSGQUEUE*qintret/if(!TWT_QUEUEFULL(al)iThequeueisntfullsoweaddthenewframeatthecurrentwwritepositionandmovethewritepointer.g->pvMsgla->write]=pg->write=((q->qwrite+1)%TIMEWEIGHTTASKQUEUESIZE;ret=oThestackisfullsowearethrowingawaythisvalue.Keeptrackofthenumberoftimesthishappensg->overflow++ret=-1://*解锁return(ret)**米**米来米***来米*半米*米*半米*米求***半*米米求半**米求半**半求半和*米*//消息分发机制//*算法是//*正常返回0,出错返回-1水米米******水*米*水**米*半*水米米冰半**水水*水米米半米冰水*米水水*水*米水水externintRecToFileMsgProc(T_MSG_REC2FILE*ptMsg);intDispatchMsg(TTWTMSG*ptMsgitif(NULl=ptMsggotoErrRet/*dispatchmsg*/switch(ptMsg->enMsgType)caseTWTPINgPoNgBuffrecRecToFileMsgProcl(TMSG_REC2FE)(pmSg->pMsg);/*处理消息*/destroyMsg(pmSg;/*消毁消息breakdefault.printf("DispatchMsgMsgtypeError!n")break.return0ErrRetprintf("DispatchMsgFail!";return-1./*buffsize*/#defineP|NGPONG_BUFFBSIZE0X20000//10*1024*1024/*10M*/*pingpongbuff*///chargacPINGBUFF[PINGPONGBUFFBSIZE];/*PingBuff*///chargacPONGBUFF[PINGPONG_BUFFBSIZE]*PongBuff*/水米米*********米*水**米*半*水米米水**冰水*水米米半半水半米冰水*米水水*水*米米//*释放pingpongbuff/必然成功//*无返回木***木*水****本**水*水水*水****本水**水水****水水***本***米*水voidDestroyPingPongButt(TPINGPONGBUFFUSEDESptPingPongButt)nLoopif(NULL=ptPingpongbuffreturnfor(nLoop=0;nLooptIngBuffUse[nLoop].pcHeadAddr)free(ptPingPong->tPingBuffUse[nLoop].pcHeadAddr)free(ptPingpongBuff)/初始化pingpongbuff返回pignpongbuff的描述指针//*正常返回0,出错返回-1水水水水水水水水水木水木水水水水水木水木水水水水水水水水本水水水水水水水水水本水水水水水水水水水水水水水TPINGPONGBUFFUSEDESInitPingPongBuff(unsignedintnBuffSizeTPINGPONGBUFFUSEDES*ptBuffDes=NULLintnLoop/*获取buf描述*ifNULL==(ptBuffDes=malloc(sizeof(TPINGPONGBUFFUSEDES))))gotoErrRetmemset(ptBuffDes,0,sizeof(T_PINGPONGBUFFUSE_DES));/*分别初始化ping和pong*/for(nLoop=0;nLooptIngBuffUsenLooppcHeadAddr=mallocnBuffSize))gotoErrRet;ptBuffDes->tIngBuffUselnLoop]nBuffSizenBuffsizeptBuffDes->tPingBuffUse[nLoop].oFfsetptBuffDes->tPingBuffUsenLoop)eUseStatus-=BUFFWRITEABLE;ptBuffDes->eCurUseIDBUFFPINGreturnptBuffDesErrretprintf("lnitPingPongBuffFail!");DestroyIngPongBuff(ptBuffDes)turnnull平**米**米*米***来米米*米*米*半米*米米米来*半米平**米米求*来*半求半来*米求*和*米*/*Resetpingpongbuff//*正常返回0,出错返回-1米米米米水冰米*米米水**米米冰*米水米米米米水米水*水米米来米米x米来米米水冰来来宋来水米来米来冰#defineResetBuffUse(ptBuffuse)ptBuffUse->oFfset0ptBuffUse->eUseStatusBUFFWRITEABLEgenerateafilerecmsg*正常返回消息体的指针,异常返回NULLT_MSG_REC2lGKSenFRMSB(T_BUFF_USE_DES*ptBuffUse,REC_FILE_DESLIST*ptFileListRTMSGREC2FILEKE*ptRFMsg=NULL;if(NULL==(ptRFMsgmalloc(sizeof(T_MSGREC2FILE)returnnUllptRFMsg->ptBuffUseptBuffUseptRFMsg->ptFilelistptFilelist;returnptRFMsg - IMDN开发者社群-imdn.cn">
登录
首页 » Others » 内存乒乓缓存机制和消息分发机制的C代码实现

内存乒乓缓存机制和消息分发机制的C代码实现

于 2020-12-03 发布
0 320
下载积分: 1 下载次数: 0

代码说明:

用C代码实现乒乓内存缓冲机制,具体实用价值,帮助您提高内存响应速度与及时数据的处理。unsigned long writeunsigned long greadunsigned long overflowST TWTMSG QUEUE:/ Helper macros for accessing Msg queues. *#define tWt QUEUE EMPty(a)(((g->write==(q)->gread)? 1: 0)#define twt_ QUeUe full(a)(((((q)->qwrite +1% TIMEWEIGHT TASKQUEUE SIZED)==(q)->gread)?1: 0)米 generate a Msg entity*正常返回消息体的指针,异常返回NULLT TWTMSG* generateMsg(tT-TWTMSG* pmSg=nULL,if(NULL =-(ptMsg malloc(sizeof(T TWTMSG)))return NULL;memset(ptMsg, 0, sizeof(T TWTMSG)return pmSg;destroy a Msgvoid destroy Msg(t TWTMSG ptMsgif(NULL ptMsg->pfDestroyMsg)pt Msg->pfDestroy Msg(ptMsg->pvMsg)if (NULL != pt Msg)free(pmSgfree a Msg Queuevoid freeTWTMsg Que(T TWTMSG QUEUE* ptMsgQif(NULL =ptMsg Afree(ptMsg Q);Init a Msg QT TWTMSG QUEUE* initTWTMsg QueoT TWTMSG QUEUE pmSg Q= NULlif (NULL ==(ptMsgQ malloc(sizeof(T_ TWTMSG QUeue)goto ErrRetmemset(ptMsgQ, 0, sizeof(T TWTMSG QUEUE))return pmSg Q;Errretprintf( initTWTMsg Que Fail! ")freeTWTMsgQue(ptMsg Q)return nullPop a pvMsg packet from a msg packet queues param g is the packet queue from which to pop the pbuf@return pointer to pvMsg packet if available, NULl otherwiseT TWTMSG* TWTMsg Get(T_ TWTMSG QUEUE aT TWTMSG*//*加锁if(TWT_ QUEUE_ EMPTY(a))iReturn a NUll pointer if the queue is emptypmSg=NULL;else is The queue is not empty so return the next frame from itand adjust the read pointer accordinglypmSg=g->pvMsglq >greadg->gread =((q->gread +1)% TIMEWEIGHT_TASKQUEUE_ SIZE)/*解锁return(pmSg);Push a pmSg packet onto a pvMsg packet queue@param p is the pmsg to push onto the packet queue@param g is the packet queue.W @return 0 if successful, -1 if q is fullnt TWTMsg Send(T tWTMSg*p, T TWTMSG QUEUE *qint ret/if(!TWT_ QUEUE FULL(al)iThe queue isn t full so we add the new frame at the currentw write position and move the write pointer.g->pvMsgla->write]=pg- >write =((q->qwrite+1)% TIMEWEIGHT TASKQUEUE SIZE;ret =oThe stack is full so we are throwing away this value. Keep trackof the number of times this happensg->overflow++ret =-1://*解锁return(ret)**米**米来米***来米*半米*米*半米*米求***半*米米求半**米求半**半求半和*米*//消息分发机制//*算法是//*正常返回0,出错返回-1水米米******水*米*水**米*半*水米米冰半**水水*水米米半米冰水*米水水*水*米水水extern int RecToFile MsgProc(T_ MSG_ REC2 FILE* ptMsg);int DispatchMsg(T TWTMSG *ptMsgitif(NULl = ptMsg goto ErrRet/*dispatch msg*/switch(ptMsg->en Msg Type)case TWT PINgPoNgBuff recRecTo File Msg Procl(TMSG_REC2FE) (pmSg->pMsg);/*处理消息*/destroy Msg( pmSg;/*消毁消息breakdefault.printf("Dispatch Msg Msgtype Error! n")break.return 0ErrRetprintf("Dispatch Msg Fail! ";return-1./*buff size*/#defineP| NGPONG_ BUFF BSIZE0X20000//10*1024*1024/*10M*/*ping pong buff*///chargacPINGBUFF[PINGPONG BUFF BSIZE]; /* Ping Buff*///chargacPONGBUFF[PINGPONG_ BUFF BSIZE] *Pong Buff*/水米米*********米*水**米*半*水米米水**冰水*水米米半半水半米冰水*米水水*水*米米//*释放 ping pong buff/必然成功//*无返回木***木*水****本**水*水水*水****本水**水水****水水***本***米*水void Destroy Ping Pong Butt(T PINGPONGBUFF USE DES ptPing Pong Butt)nLoopif (NULL = pt Ping pong buffreturnfor (nLoop=0; nLooptIng BuffUse[nLoop]. pcHeadAddr)free(ptPing Pong ->t Ping BuffUse[nLoop]. pcHeadAddr)free(pt Ping pong Buff)/初始化 ping pong buff返回 pign pong buff的描述指针//*正常返回0,出错返回-1水水水水水水水水水木水木水水水水水木水木水水水水水水水水本水水水水水水水水水本水水水水水水水水水水水水水T PINGPONGBUFF USE DES InitPing Pong Buff(unsigned int n BuffSizeT PINGPONGBUFF USE DES* ptBuffDes=NULLintnLoop/*获取buf描述*if NULL==(ptBuffDes=malloc(sizeof(T PINGPONGBUFF USE DES))))goto ErrRetmemset(pt BuffDes, 0, sizeof(T_PINGPONGBUFF USE_ DES));/*分别初始化ping和pong*/for(nLoop=0; nLooptIng BuffUsenLoop pcHeadAddr =malloc n BuffSize))goto Err Ret;ptBuffDes->tIng BuffUselnLoop] nBuffSize nBuffsizeptBuffDes->tPing BuffUse[nLoop]. oFfsetptBuffDes->tPing BuffUsenLoop) eUseStatus-=BUFF WRITEABLE;pt BuffDes->eCurUseIDBUFF PINGreturn pt BuffDesErrretprintf("lnitPing Pong Buff Fail!");DestroyIng Pong Buff(pt BuffDes)turn null平**米**米*米***来米米*米*米*半米*米米米来*半米平**米米求*来*半求半来*米求*和*米*/*Reset ping pong buff//*正常返回0,出错返回-1米米米米水冰米*米米水**米米冰*米水米米米米水米水*水米米来米米x米来米米水冰来来宋来水米来米来冰#define ResetBuffUse(ptBuffuse)pt BuffUse->oFfset0pt BuffUse->eUseStatus BUFF WRITEABLEgenerate a file rec msg*正常返回消息体的指针,异常返回NULLT_MSG_REC2lGK SenFRMSB(T_BUFF_USE_DES *ptBuffUse, REC_FILE_DESLIST *ptFileListRT MSG REC2FILE KE* ptRFMsg= NULL;if(NULL ==(ptRFMsg malloc(sizeof(T_ MSG REC2 FILE)return nUllptRFMsg- >pt BuffUse pt BuffUseptRFMsg->pt Filelist ptFilelist;return ptRFMsg

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • matlab 字符串识别.zip
    【实例简介】有代码,有解释,有分析,可以直接运行,用matlab实现的字符串切割
    2021-11-30 00:50:55下载
    积分:1
  • PSF参数估计
    模糊长度和尺度估计
    2021-05-06下载
    积分:1
  • PID控制直流电机调速(含proteus仿真)
    PID控制直流电机调速(含proteus仿真)
    2020-12-06下载
    积分:1
  • Feedback Control of Dynamic Systems (7th Edition)
    Feedback Control of Dynamic Systems (7th Edition) 描述动态系统的反馈控制
    2020-12-11下载
    积分:1
  • MDC-Max机床监控与数据采集系统
    MDC-Max机床监控与数据采集系统
    2020-12-04下载
    积分:1
  • 深度学习之思维导图
    本文是一份超全的深度学习思维导图,涵盖深度学习的基础概念、架构和优化策略,并以TensorFlow为例,列举深度学习各个模块的介绍。
    2021-05-06下载
    积分:1
  • 现代谱估计 matlab
    谱估计代码,含有改进经典谱估计和现代谱估计。
    2020-11-29下载
    积分:1
  • JavaWeb图书管理系统servlet+JSP+javabean 无框架适合新手
    JavaWeb图书管理系统servlet+JSP+javabean 无框架适合新手学习的web项目
    2020-06-25下载
    积分:1
  • Axure电商产品移动端交互原型AxureUX.rp
    本作品是一套高保真移动端电商APP产品原型模板,包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。本模板由一百三十多个界面上千个交互元件及事件组成、交互效果完成率95%以上,其中很多界面和交互元件都是在所有的APP产品中通用的,只要稍作修改就可以快速复用到您的项目原型中。另外,本模板在设计过程中遵守了AxureUX移动端元件库中的相关标准和规范,具有便于修改和方便维护的特点,无论对于交互设计师还是产品经理,都是一套绝佳的学习和参考的原型模板。会员用户可直接在会员群中获取本作品源文件及相关文档。
    2020-11-28下载
    积分:1
  • 专利撰写样例
    专利撰写参考样例,可以参考写。机械相关领域的专利,都可以参考。CN201482299U说明书1/2页多功能组合式带式压滤机技术领域[0001]本实用新型涉及一种环保领域水处理系统中,适用于污泥处理的多功能组合式带式压滤机。背景技术[000]环保领域水处聞系统中的污泥处理设备中,带式压滤机是)泛采用的设备。目前带式脱水设备形式很多,但是由于各种使用原因,都存在有污泥分离过程中,混合、絮凝不充分,影响了带式压滤机使用效果,无形中增加了污泥处理的费川实用新型内容[0003]本实用新型要解决的技术问题是提供一种集絮凝、浓缩、布料及脱水于一体的多功能组合式带式压滤机,解决混合、絮凝不充分,滤液中仍含有大量污泥,布料不均匀等缺陷。[000为了解决上述问题,本实用新型提供了一种由絮凝装置、浓缩装置、宽带布料装置、脱水装置组成的多功能组合式带式压滤机。泥浆浓度小于1%时采用絮凝装置、浓缩装置、脱水装冒组合,浓度大于1%时采用絮凝装置、宽带布料装置、脱水装詈组合,絮凝装置安装在脱水装置上部左端;浓缩装置安装在脱水装置上部中间;宽带布料装置安装在脱水装置上部中间。[0005絮凝装置是絮凝筒和裝仼絮凝筒上部的搅拌机组成的装置;所述絮凝装置的搅拌机为螺旋提升式搅拌机。[000]浓缩装置是浓缩装置驱动电机减速机安装在浓缩装置的左端,其右侧安装1~3只浓缩网筒,浓缩装置的右下端安装1~3只小布料器组成的装置。[000宽带布料裝置是分配槽和安装在分配槽上部的布料筒组成的装置[0008脱水装置是重力脱水区位于脱水装置的上端左侧,重力脱水区右侧依次安装上滤带清洗装冒、上调偏装置、脱水裝置驱动电机减速机:主动辊安装在脱水装置的右端,主动辊之间右侧形成剥离区,剥离区左侧的S形区域是S挤压脱水区,S挤压脱水区左侧是上滤带和下滮带形成的楔形脱水区,转向辊安装在脱水设备的左端,下调偏裝置安装在脱水裝置的下部右侧,下滤带清洗装置安装在下调偏装置左侧组成的装置。附图说明[0009下面结合附图和具体实施方式对本实用新型作进一步详细的说明[0010]图1是本实用新型多功能组合式带式压滤机的第一种实施方式的示意图。[0011图2是木实用新型多功能组合式带式压滤机的第二种实施方式的示意图具体实施方式[0012]本实用新型工作情况是这样的:CN201482299U说明书2/2页[0013]如图1所示,经过加药后的原低浓度泥浆由泥浆口20进入絮凝装置23,泥浆在絮凝筒2屮絮凝,通过螺旋提升式的搅拌机1搅拌加速泥浆与药剂的反应,形成较大的絮凝团,然后自流到浓缩装置4中。由浓缩装置驱动电杋减速杋3带动不锈钢浓缩网筒5旋转,泥浆在浓缩网筒5中进行浓缩,浓缩后的泥浆通过配套的小布料器7均匀分布在上滤带19上。脱水装置驱动电机减速机10带动主动辊11转动,主动辊11带动上滤带19和下滤带16移动。泥浆在上滤带19带动通过重力脱水区6,稳压阀提供恒定压力的转向辊18,转向落到下滤带l6上,然后在楔形脱水区17预挤,最后在S挤压脱水区13挤压脱水,并形成泥饼,泥饼最终在剥离区12分离出脱水装置25。上滤带19通过射沇阀控制的上调偏装置⑨调整滤带的位置。上滤带凊洗装置8对上滤带19进行凊洗。下滤带16通过射流阀控制的下调偏装置14调整滤带的位置。下滤带清洗装置15对下滤带16进行清洗.[0014]如图2示的经过加药后的原低浓度泥浆由泥浆∏20进入絮凝裝置23,泥浆在絮凝筒2中絮凝,通过螺旋提升式的搅拌机1搅拌加速泥浆与药剂的反应,形成较大的絮凝团,然后自流到宽带布料装置24,在布料筒21中混凝,用由分配槽22均匀分布到上滤带19。脱水装置驱动电机减速机10带动主动辊11转动,主动辊11带动上滤带19和下滤带16移动泥浆在上滤带19带动通过重力脱水区6,稳压阀提供恒定压力的转向辊18,转向落到下滤带16上,然后在楔形脱水区17预挤压,最后在S挤压脱水区13挤压脱水,并形成泥饼,泥饼最终在剥离区12分离岀脱水装置25。上滤带19通过射沇阀控制的上调偏装9调整滤带的位萓。上滤带清洗装萓8对上滤带19进行凊洗。下滤带16通过射流阀控制的下调偏装置14调整滤带的位置。下滤带淸洗装置15对下滤带16进行清洗CN201482299U说明书附图1/2页89252310182N相12171613图15CN201482299U说明书附图2/2页252019TIINT18a尺G)12161415EADZARSEADE图6
    2021-05-06下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载