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 324
下载积分: 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 个回复

  • 学生信息管理系统(python)源代码
    学生信息管理系统(python)源代码,里面包含两种做法(基于过程和面向对象)
    2021-05-07下载
    积分:1
  • 基于深度学习的图像分类和分割网络总结
    在此记下AlexNet等八个经典网络的架构、创新点等,以供参考。
    2021-05-06下载
    积分:1
  • barnyard2-1.9.tar.gz
    barnyard2-1.9.tar.gz
    2020-12-08下载
    积分:1
  • MFCC梅尔倒谱参数及matlab代码
    MFCC梅尔倒谱参数及matlab代码内容:1. Mfcc梅尔倒谱参数参数知识 2. mfcc的matlab代码
    2020-12-05下载
    积分:1
  • 史上最全最详细的flink 中文教(千多页pdf).pdf
    最全最详细的flink 中文教程,详细介绍各个接口,并附带demo(一千多页pdf)最全最详细的flink 中文教程,详细介绍各个接口,并附带demo(一千多页pdf)执行配置1.5.7.1程序打包和分布式执行1.5.7.2并行执行1.5.73执行计划1.5.74重启策略1.5.7.5类库158FlinkCeP-Fink的复杂事件处理1.5.8.1风暴兼容性Beta158.2Gelly Flink Graph AP158.3图AP1.5.84迭代图处理1.5.8.4.1类库方法1.584.2图算法1.5.8.4.3图形生成器1.5.844二分图1584.5FlinkML- Flink的机器学习1.5.85快速入门指南1.5.8.5.1如何贡献5.8.5.2交义验证1.58.5.3Distance metrics5.8.54K-Nearest Neighbors关联158.55MinMax scaler1.5.8.5.6Multiple Linear regression1.5.8.5.7在管道的引擎盖下看158.5.8Polynomial Features158.59随机异常值选择1.5.8.5.10Standard scaler158.5.11Alternating Least squares1.5.8.5.12SVM using COCoA1.58.5.13最佳实践1.59AP迁移指南1.5.10部署和运营集群和部署1.6.1独立群集1.6.1.1YARN设置1.6.1.2Mesos设置1.6.1.3Kubernetes设置1.6.14Docker设置1.6.1.5亚马逊网络服务(AWS)1.6.1.6Google Compute Engine设置1.6.1.7MapR设置1.6.1.8Hadoop集成1.6.19JobManager高可用性(HA)1.6.2状态和容错16.3检查点1.6.3.1保存点1.6.3.2状态后台1.6.3.3调整检查点和大状态1.6.3.4配置1.64生产准备清单1.6.5命令行界面166Scala REPl1.6.7Kerberos身份验证设置和配置168SSL设置6.9文件系统1.6.10升级应用程序和Fnk版本1.6.11调试和监控度量1.7.1如何使用日志记录1.7.2历史服务器1.7.3监控检查点1.74监测背压1.7.5监控 REST AP1.7.6调试 Windows和事件时间1.7.7调试类加载1.7.8应用程序分析1.7.9Flink Development1.8将 Flink导入|DE1.8.1从 Source建立Fink8.2内幕组件堆栈1.9.1数据流容错19.2工作和调度19.3任务生命周期194文件系统19.55Apache Flink文档Apache Flink文档译者: flink. sob.cn在线阅读●PDF格式EP∪B格式●MOB格式代码仓库本文档适用于 Apache Flink17 SNAPSHOT版。这些页面的建立时间为09/08/18,中部标准时同07:53:00°Apache Flink是一个用于分布式流和批处理数据处理的开源平台Fnk的核心是流数据流引擎’为数据流上的分布式计算提供数据分发’通信和容错。 Flink在流引擎之上构建批处理’覆盖本机达代支持,托管内存和程序优化。第一步概念∶从Fink的教据流编程模型和分布式运行时环境的基本概念开始。这将有助于您了解文档的其他部分·包括设置和编程指南σ我们建议您先闖读这些部分教程:o实现并运行 Data strean应用程序o设置本地Fink群集编程指南:您可以阅读我们关于基本AP|概念和 Data Stream A門或 Data Set APl的指南’以了解如何编写您的第一个Fink程序。部署在将Fink工作投入生产之前,请阅读生产准备清单发行说明发行说明涵盖了Fink版本之间的重要更改。如果您计划将Fink设置升级到更高版本,请仔细阅读这些说明。Fink1.6发行说明Fink1.5发行说明。外部资源6Apache Flink文档● Flink Forward: Flink forward网站和 You tube上提供了以往会议的讲座。使用 Apache Flink进行强大的流处理是一个很好的起点●培训∷数据工匠的培训材料包括幻灯片·练习和示例解決方案。·博客: Apache Flink和数据工匠博客发布了有关Fink的频繁深入的技术文章概念概念数据流编程模型数据流编程模型译者: flink. sob.cn抽象层次Flink提供不同级别的抽象来开发流/批处理应用程序SQLHigh-level LanguageTable AplDeclarative dslDataStream/Data Set APICore aplsStateful Stream ProcessingLoW-level building blockstreams, state, [event] time)●最低级抽象只提供有状态流。它通过卩 rocess Function嵌入到 Datastream aF丨中。它允许用户自由处理来自一个或多个流的事件,并使用一致的容错状态此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算实际上,大多数应用程序不需要上逑低级抽象,而是针对 Core a叫编程,如Data stream AP(有界/无界流)和 Data set ap(有界数据集)。这些流畅的A門提供了用于数据处理的通用构建坎’例如各种形式的用户指定的转换’连接’聚合’窗口’状态等。在这些AP丨中处理的数据类型在相应的编程语言中表示为类低级尸 rocess function与 Data stream A尸/集成’因此只能对某些算子操作进行低级抽象。该数据集A尸隈提供的有限数据集的其他原语,如循环/迭代。●该 Table ap是为中心的声明性DSL表,其可被动态地改变的表(表示流时)。该 Table a門遵循(扩展)关系模型:表有一个模式连接(类似于在关系数据库中的表)和A門|提供可比的算子操作·如选择,项目,连接,分组依据’聚合等 Table a門程序以声明方式定乂应该执行的逻辑算子操作,而不是准确指定算子操作代码的外观。虽然 Table ap丨可以通过各种类型的用户定义西数进行扩展’但它的表现力不如 Core AP’但使用更简洁(编写的代码更少)。此外, Table a門l程序还会通过优化程序·在执行之前应用优化规则。可以在衣和 Data strean/ Data set之同无缝转换’允许程序混合7 ble aP以及Data Stream u Data Set API数据流编程模型Flink提供的最高级抽象是SQL。这种抽象在语义和表达方面类似于7ab/eA門·但是将程序表示为SQL查询表达式。在SQL抽象与 Table apl紧密地相互作用’和SQL查询可以通过定义表来执行7ab/eA尸程序和数据流Flink程序的基夲构建块是流和转换。(请注意,Fink的 Data set a|中使用的Data Set也是内部流-稍后会详细介绍。)从概念上讲·流是(可能水无止境的数据记录流’而转换是将一个或多个流作为一个或多个流的算子操作。输入’并产生一个或多个输出流。执行时’Fink程序映射到流数据流’由流和转换算亍纽成σ毎个数据流都以一个或多个源开头,并以一个或多个接收器结東。数据流类似于任意有向无环图(DAG)°尽管通过迭代结构允许特殊形式的循环,但为了简单起见’我们将在大多数情况下对此进行掩饰。Datastream lines env. addsourceSourrenew FlinkKafkaconsumer>(.)Datastream Event> events =lines. map((line)-> carse(line)了FBs∫n?ato胃Datastrearrs-atis-.cs> statskerby (id"!fransformationtimewindow (Time, seconds(10)apply(new MyWNindowAggregationFurction();stas. addsink(new Rolling sink(path),SinkLsourceT! ansforratio门sinkperatorOperatorsOperatorkey By(/Sourcemap() window()SinkapplystreamStreaming Datarow通常,程序中的转換与数据流中的算子之同存在一对一的对应关系。但是,有时一个转换可能包含多个转换算子源流和接收器记录在流连接器和批处理连接器文档中。 Data Stream算子和 Data Set转换中记录了转换。10
    2020-11-04下载
    积分:1
  • 网页音乐播放器(个人制作)
    在网上看到很多网页音乐播放器,做得都很精致漂亮,却看不到它们的代码。我在大学毕业时做的毕业设计——在线音乐网站实现,搜集了很多网页音乐播放器的资料,加上现在的整理,自己做了一个网页音乐播放器。 相关的说明在压缩包的【readme】文件中,希望给予正在开发网页音乐播放器的人员一个参考。
    2020-12-05下载
    积分:1
  • IEC61970 中文本(全)
    IEC 61970是国际电工委员会制定的《能量管理系统应用程序接口(EMS-API)》系列国际标准。对应国内的电力行业标准DL890。   IEC 61970系列标准定义了能量管理系统(EMS)的应用程序接口(API),目的在于便于集成来自不同厂家的EMS内部的各种应用,便于将EMS与调度中心内部其它系统互联,以及便于实现不同调度中心EMS之间的模型交换。   IEC 61970主要由接口参考模型、公共信息模型(CIM)和组件接口规范(CIS)三部分组成。接口参考模型说明了系统集成的方式,公共信息模型定义了信息交换的语义,组件接口规范明确了信息交换的语法。   虽然IEC 61970称为“能量
    2020-12-01下载
    积分:1
  • C序MODBUS协议
    严格按照MODBUS协议实现的C代码,内有详细的移植说明。和使用说明。同时支持主站从站
    2020-12-10下载
    积分:1
  • SVPWM三相逆变 MATLAB Simulink仿真模型 S-Function C语言写 PI控制
    SVPWM三相逆变 MATLAB Simulink仿真模型 S-Function C语言编写 PI控制
    2021-05-06下载
    积分:1
  • 大学物理复习基本知识点
    涵盖大学物理基本公式知识点 公式的总结和积累是应对考试的有效方法!
    2020-11-29下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载