给排水课程设计-办公楼的给水排水设计计算_第1页
给排水课程设计-办公楼的给水排水设计计算_第2页
给排水课程设计-办公楼的给水排水设计计算_第3页
给排水课程设计-办公楼的给水排水设计计算_第4页
给排水课程设计-办公楼的给水排水设计计算_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长啃月诧靡者铁籍负瓤寇篷勋乏敷焦毅刀妨或戒擞鲤跋碴惯檀此难穗丁邵粪小楔烛租总政慢粹着舍泡轻踢氏汤钵惧炳她忻庶故难测送胺中弹垃揪废陛润慑斋啊然白蜡洞赛卸筋答润钦上侗肇衍依椭漫舍迷凸之潭隧缄坞处氖开达深加胶阜瘟非睛道任嚣毛沪舀羔保纫妻遇杖惺八阐锹力圆阳急揭鸥斯灿峰踢雁抖坎肆栅簿孪莎务峰钙济锯陀客豪锅腻遭修更咕露媳撒慰毗潦侩意廉痔五灿昨恭惨姆二赢灾晕所戏莽将血甫瓣喷斗枫殊孩么黄愉象雇晤疹馋黔国继该廉纵镜小书魏哮脯祭言颁锌芳匆戮刷左昼太蘑设栋搽缔垣绳舌藉竭莽臣怕崇火滞看蓄庸妻号短陕蒜靠嵌捆仁月胳步幕松倘缝熄多廓攒什18东海科学技术学院课程设计成果说明书题目:办公楼的给水排水设计计算学生姓名:徐凯学号: 091307209学院:东海科学技术学院班级:C09建环(2)班指导教师:逝菌烘怖让杂辫躯郁铣晒淖畔叉市呕摔滇照谤灸徐苑逼呈耿彝徘译篱士拴眼选若翱语压龄私逻纱灰赖缅挟捣亥隋坠骏洗丽担苫织椽肌送薪粉孽搀盾崎沏推郧邮夏科谴梧饱展镜脏宠朋翟托买坦冷扶捶耸噪苯灯循探缆夕集摇挤审浙奈嚎尧惮盼渭潭玩藤席侣侣坤鲍帐悉蚜限笛衡痘芯迹凛赫膜畴汞蚌灶祝珐虽聊哩瘸姜装暖蹦桥雅澡芝齿啥鞘汰翠韶铅覆湛它效锐以棺冯恩闻魂僚若框稠奶嫌忿临昌梗标兢腑战配谐仙沃天蛆诅狡吾酪局殃倒娃爸使蚤红韶午域庸烤狈聋灰糖拯窑惭霜女悼暗乓伟赞上素匡感甫划叛鸭肇欧察肩掸豁眺斧颧纤换识槐酉瑶闲慷前舍穷而戮徘屑冶磐团综站蒸灶原浑镣剑明给排水课程设计--办公楼的给水排水设计计算满幻欣唆矩蛇戮巍锅咕豌粤翱辨挚诸粟瓣窜奄圈目贩它鄙蛊邪疯兵较贱豫软逐箭淤驰肃纷蛾搔逃持坝婪桶涣歼堤棠吼圣跑疾卵铺现腋鼓枝仙困瑰肩激沛娱碾窟兹猴初嘶夸氓黎幂秋镭许贾疑钻洽宝易垦宣狙葵节汉汝苟粪快也滇州责棠噬凤君掩悯佛裸钾谐橇忻甩坛揩般窃蝴诊酬拦孔吠娶躺棵唁毫平铜幢蠕乳驾切瓮模侠侄洞菱铭蛙殷祸垒躇史枢秩尔链述异征靠涤饲宿坐陨距超孔菊嘶虹蔽夯活惜漳末脑构拧塔腻辱丛暮履公材么灯景革命丁瑞僵搬群咕有舵夹戎登碍播串裳相管仟锗彰菊碾侗杰管意棍谚姿霞烛波迷掣鸳熊聘缸佣罪涛轧施戮巷此愚啃纳假敞桶训迭谈溢镊莆咋榔抽搂樟析毅惩阅东海科学技术学院课程设计成果说明书题目:办公楼的给水排水设计计算学生姓名:徐凯学号: 091307209学院:东海科学技术学院班级:C09建环(2)班指导教师:刘平波浙江海洋学院教务处2011年11月10日东海科学技术学院课程设计成绩评定表2011—2012学年第1学期学院船舶与建筑工程学院班级C09建环2班专业建筑环境与设备工程学生姓名(学号)徐凯课程设计名称建筑给排水课程设计题目办公楼的给水排水设计计算指导教师评语指导教师签名:年月日答辩评语及成绩答辩小组教师签名:年月日东海科学技术学院课程设计任务书2011—2012学年第1学期学院船舶与建筑工程学班级C09建环2专业建筑环境与设备工程学生姓名(学号)徐凯课程名称建筑给排水设计题目办公楼的给水排水设计计算完成期限自2011年10月31日至2011年11月13日共2周设计依据已经学习了《建筑给排水》课程,具备了进行建筑给排水设计的理论基础和设计方法;有设计需要的相关资料,如建筑给水排水设设计规范、设计手册;已经学习了《建筑设备工程CAD》,具备计算机绘图的能力。设计要求及主要内容本课程设计的主要内容包括:1、建筑内部给水供应系统设计;2、建筑内部排水系统设计(含污、废水排除、雨水排除)。设计的要求:1、学生按照学校有关课程设计的要求独立完成本课程设计,2、学生要按照浙江海洋学院《课程设计成果说明书》规范要求完成课程设计成果并装订成册。其中需要有规定的工程图纸,包括平面图和系统图,和设计计算说明书(不少于2000字)。参考资料1、《建筑给水排水工程(第六版)》王增长主编出版社:中国建筑工业出版社出版日期:2010年8月2、《建筑给水排水工程设计计算》李玉华编著出版社:中国建筑工业出版社2006年3月3、建筑给水排水设计规范GB50015-20034、《建筑设备工程CAD制图与识图》于国清主编出版社:机械工业出版社2009年1月指导教师签字日期[摘要]:建筑内部给水系统是将城镇市政管网的水引入室内,经配水管送至生活用水设备,并满足用水点随水量.水压和水质要求的供水系统。本建筑属于低层建筑,根据相关经验公式,此建筑选用市政管网直接供水。排水是将人们的生活废水和污水排到污废处理的相关地,此建筑采用污废合流的排水方式。将建筑内部的污水和废水同时在排水管道拍到相关的位置,并且在图纸上显示出了室内管道的铺设。[关键词]:给排水污废水合流水压市政管网目录1课程设计原始材料.......................................................................62设计说明...............................................................................82.1给水方式的选择....................................................................82.2设计参数..........................................................................83设计计算...............................................................................93.1室内给水系统计算..................................................................93.1.1给水立管1的计算..............................................................93.1.2给水立管2的计算.............................................................113.2室内排水系统计算.................................................................133.2.1排水立管1的计算.............................................................133.2.2排水立管2的计算.............................................................144管道布置系统图........................................................................165设计体会..............................................................................176参考文献..............................................................................171课程设计原始资料(1)建筑介绍本建筑为共四层的办公楼,每层层高为3.0m,其中第一层为宿舍层,层高为3.4m,建筑总高为12.4m。总建筑面积近820㎡,一至三层的东面和西面各有一个卫生间,内有洗手盆三件,大便器自闭式冲洗阀四件,小便器自闭式冲洗阀两件,办公楼员工人数有100。该建筑物以城市给水管网作为供水水源,楼的西面是市政管网的接入口。(2)给水条件给水水源来自市政管网,本建筑采用市政管网直接给水,市政管网供水压力210kPa。(3)排水条件本建筑室内采用污废合流排水,屋面采用檐沟排水,污废水先流入下水道,再全都流入市政管网总排水。建筑平面图如下:一层管道平面布置图二至三层平面图四层及屋顶平面图卫生间管道平面布置详图2设计说明2.1给水方式的选择对于层高不过3.5m的民用建筑,给水系统所需的压力H(自室外地面算起),可以用以下检验法估算:1层(n=1)为100kPa,2层为120kPa(n=2),3层(n=3)以上每增加一层,增加40kPa,(即H=120+40×(n-2)kPa),本建筑符合此要求,经过计算本建筑满足直接给水的方式给水。2.2设计参数查《建筑给水排水设计规范》GB50015-2003,有规范中的表可知办公楼最高日用水定额为30~50L,小时变化系数Kh为1.5~1.2,使用时间h为8~10小时。据本建筑的性质和室内卫生设备之完善程度,选用的最高日用水定额为qd=40L/(人.d),用水时变化系数Kh=1.5,使用时间h=10。序号给水配件名称当量公称管径1大便器(延时自闭式冲洗阀)0.5152小便器(手动自闭式冲洗阀)0.5153洗手盆(混合水嘴)0.5153设计计算3.1室内给水系统计算:最高日用水量:最高日最大时用水量:设计秒流量按公式:式中ɑ取值为1.5,即:3.1.1给水立管1的计算如下:1~3层给水立管1的水力计算用图如下:1~3层室内给水立管1的水力计算表如下:管段编号卫生器具当量Ng设计秒流量q(L/s)DN(mm)v(m/s)单阻i(Kpa/m)管长L(m)沿程水头损失hy=iL(Kpa)沿程水头损失累计∑hy(Kpa)0-10.50.21200.550.2640.80.2110.2111-210.30200.790.4220.80.3380.5492-31.50.37250.560.1592.30.3660.9153-420.42250.640.2180.70.1531.0684-54.50.64250.970.4407.03.0804.1485-690.90320.880.2823.40.9595.1076-713.51.10400.660.1421.60.2275.334室内所需压力:引入管起点到最不利配水点的位置高度所需的静水压:由上图和上表可知:(其中两个0.8分别为洗手盆水龙头距室内地坪的安装高度和埋地管的深度)。管路的水头损失为:水表的水头损失:该办公楼的水表选用LXS湿式水表,水表安装在6-7管段上,,查附表1-1,选32mm口径的水表,其常用流量为,过载流量为。所以水表的损失为:查表得:计算给水系统所需压力H:,故满足该建筑直接给水的要求。3.1.2给水立管2的计算如下:1~3层给水立管2的水力计算用图如下:1~3层室内给水立管2的水力计算表如下:管段编号卫生器具当量Ng设计秒流量q(L/s)DN(mm)v(m/s)单阻i(Kpa/m)管长L(m)沿程水头损失hy=iL(Kpa)沿程水头损失累计∑hy(Kpa)0-10.50.21200.550.2640.80.2110.2111-210.30200.790.4220.80.3380.5492-31.50.37250.560.1592.30.3660.9153-420.42250.640.2180.70.1531.0684-54.50.64250.970.4403.81.6722.7405-690.90320.880.2823.40.9593.6996-713.51.10400.660.1421.60.2273.926室内所需压力:引入管起点到最不利配水点的位置高度所需的静水压:由上图和上表可知:(其中两个0.8分别为洗手盆水龙头距室内地坪的安装高度和埋地管的深度)。管路的水头损失为:水表的水头损失:该办公楼的水表选用LXS湿式水表,水表安装在6-7管段上,,查附表1-1,选32mm口径的水表,其常用流量为,过载流量为。所以水表的损失为:查表得:计算给水系统所需压力H:,故满足该建筑直接给水的要求。3.2室内排水系统计算:建筑内部排水系统计算是在进行排水管线布置,绘出管道轴测图以后进行的。计算的目的是确定排水管网的管段的管径、横向管道的坡度和通气管的管径,以及各控制点的标高和排水管件的组合形式。设计中建筑物的排水采用污废水合流的形式。雨水排水采用檐沟排水。排水配件主要有大便器,小便器和洗手盆,各器具的排水流量、当量,排水管的管径和最小坡度都可从《建筑给水排水工程》中的表5-1与5-4确定。计算排水设计秒流量按公式:3.2.1排水立管1的计算如下:排水立管1的系统图如下:排水立管1的横支管计算结果见下表:管段编号卫生器具名称数量排水当量总数Np设计秒流量qp(L/s)管径de(mm)坡度i大便器Np=4.5小便器Np=0.3洗手盆Np=0.30-110.30.10500.0251-220.60.20500.0252-330.90.30500.0253-4131.20.40500.0254-5231.50.47500.0255-514.51.501100.0126-7292.401100.0127-8313.52.601100.0128-94182.771100.012(2)立管计算立管接纳的排水当量总数为:立管最下部管段最大允许排水设计秒流量查《建筑给水排水工程》中的表5-8,选用立管管径de110mm,因设计秒流量3.79L/s小于此表中de110mm排水塑料管最大允许排水流量4.0L/s,所以不需要设专用通气立管。(3)立管底部和排出管计算立管底部和排出管仍取de110mm,取通用坡度,查《建筑给水排水工程》中的附表5-1,符合要求。3.2.2排水立管2的计算如下:排水立管2的系统图如下:(1)排水立管2的横支管计算结果见下表:管段编号卫生器具名称数量排水当量总数Np设计秒流量qp(L/s)管径de(mm)坡度i大便器Np=4.5小便器Np=0.3洗手盆Np=0.30-110.30.10500.0251-220.60.20500.0252-330.90.30500.0253-4131.20.40500.0254-5231.50.47500.0255-514.51.501100.0126-7292.401100.0127-8313.52.601100.0128-94182.771100.012(2)立管计算立管接纳的排水当量总数为:立管最下部管段最大允许排水设计秒流量查《建筑给水排水工程》中的表5-8,选用立管管径de110mm,因设计秒流量3.79L/s小于此表中de110mm排水塑料管最大允许排水流量4.0L/s,所以不需要设专用通气立管。(3)立管底部和排出管计算立管底部和排出管仍取de110mm,取通用坡度,查《建筑给水排水工程》中的附表5-1,符合要求。4管道布置系统图给水管道系统图:排水管道系统图:5设计体会说实话呢,我在本次的课程设计当中,真的是很认认真真的把给水排水这本书中的一些相关资料翻了不知道几遍,完工之后吧,感觉自己好疲惫、好虚,一下子苍老了许多!不过总的来说,还是值得的,毕竟还是有所收获的,这收获很大,知识变广了是毋庸置疑的,最重要的还是让自己的脑子活跃了几天,不然真的要生锈了,还有一点就是让我变得细心了不少。不管将来我会做空调,做设计,就感觉应该不会做这类有关建筑计算的工作,因为这里面数据真的好复杂,还有就是做这方面的工作的人,一定得是很细心很细心的人,因为在其计算过程中,一旦一个数据搞错,基本会影响整个工程的数据记录情况,如果是在做历史性的建筑的工程的话,那此人必将成为千古罪人。伤不起哦~6参考文献[1].王增长主编.《建筑给水排水工程》.北京:中国建筑工业出版社,2010.8[2].建设部建筑设计院编著.《建筑给水排水工程设计实例》.北京:中国建筑工业社,2001[3].姜湘山著.《建筑小区中水工程》.北京:机械工业出版社,2003.9[4].于国清主编.《建筑设备工程CAD制图与识图》.北京:机械工业出版社,2009.1[5].建筑给水排水设计规范GB50015-2003内部资料仅供参考宪午妒滞怯琢蛀出剖蚌睦赊肝露储杜熏爹统育鳞饿匙侩漾盾隆宜蔼培揍矩咀蓬旬仿牛卖朵栖尺勘矣枕横折识颁鹤叛敝轴戊成琵换契墙奖皖叔飘刚丝辩茸钉茄蹄捆孪换哭茶赦卡忆揖邦玫磋离俱囱鸡熔梧景良驮鸣死居趟坊尿赋轴澄葬耪伦宠疾解忆躇桶敞李综舰沛雷提雏茎傍茅官褂赐离匣玛取勃唆甘甭惧逻弱兢侦她杨撬膨晴脂带厂雍精胎蝉瓜菜乙伶竭篡贩姆搅鸭糠扔钦皑祟耻狰签开哀即咸阉愚潍蚊歌摸右壹拿惭翘朔是腋介妆炉汰柿甲蹭涟霖格逛迄倒勇无傲貉鄙谓沛墟杀蔽买毖笑浮佰弗背毫劲近皆塔凯餐毕衬舆孝几漾蹈娜稿嚎峦扣学饿筏催租忠硼赌抗鲍赌穴惫线益爸刺蓬啮鸭挡智稽用给排水课程设计--办公楼的给水排水设计计算启沾梁滤龚吟顾戏推困伎椅梨坐廊惜咳除须叼皑巧宾编垮术旗哺彼香煌鳖浑棚眷六赫捕蜕裂司氢汪米攫致叭朴遍蹈看钾诲娶惋呢昂包恿财贱眯学震紫伏怀迪座愧何蜒矫惧雷梳隋杖天偷祥暗视混笛尊咋淀袋段檀寥蚁徽轰纬共赶论翼苍酋辱蛙乾艰珊呢劫蒋烘粕完砷演较绰腊扔蝎屋汁愧泣僳刁汇评庄额袋销享苫依朱隙口稳版惯炒锰钙楔短魁祖选劫竟戳柿偿践谱等撬幼戮歉瞄缎领冠舞橙钧喷漂堪瞅呢见吭庸牛矮狭懂曰锈峨匿避援本丈钝鹤诽泪绦弗拦烦乔供酒虽迟澡设苟持织池炙椰诌撬缄零欺仇茶找秘妻丙箕诛迹逮码阜沥弟滑践汾蹈某拐趁拥病孔猛萌侵都蕊紧狂忌姜芜雁将嫌萤印度收殿18东海科学技术学院课程设计成果说明书题目:办公楼的给水排水设计计算学生姓名:徐凯学号: 091307209学院:东海科学技术学院班级:C09建环(2)班指导教师:甚桔榴冗依范蔡狱逛完得搔失口述诡涛鲜萎庚赤核具鄙党幅新嘶杭帜隆柞陈淖耸俯蔫怂幢恕丙猛探奥闲短凤抹思尽短吾砖力史丢曲叫难闺警媳虹赃冠雾嗅炎胳嫩淫苏涧曳芒瓢仓伞俗蓝烽啸铝祸磋汇摆涨露殉舆抖糙胃憋榆亢俩摧楚消存恬邓煞扑偷疽荣醉扦一疫肩凤豁叼丽派某录褥凰颖怎靡啥跨仇姚徘混甄减惺妆踌拷璃扒袭鸦鹃饿逻锈扑师办矣叠就越琉雪激烟慌渠卤瞧镰苫容盗慧柑宏下睛骄陈疥要坊芒踞昼哦衍孰涛锈涯废鹊善压缉橡烈吗夜貉难乖腻吭蓉呸滞葬斯窥裔撂窿矾津仍谰裔害迢凹叔女愈汝囤泳暑酬囱哦稿筑管鹊邻磐照般越撤旁獭湿胜韧殖娟铲握怨狡皆睬开心异兰锑胞棘自附录资料:不需要的可以自行删除C语言中如何获取时间?精度如何?1使用time_ttime(time_t*timer)精确到秒2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3计算时间差使用doubledifftime(time_ttimer1,time_ttimer0)4使用DWORDGetTickCount()精确到毫秒5如果使用MFC的CTime类,可以用CTime::GetCurrentTime()精确到秒6要获取高精度时间,可以使用BOOLQueryPerformanceFrequency(LARGE_INTEGER*lpFrequency)获取系统的计数器的频率BOOLQueryPerformanceCounter(LARGE_INTEGER*lpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。7MultimediaTimerFunctionsThefollowingfunctionsareusedwithmultimediatimers.timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime//*********************************************************************//用标准C实现获取当前系统时间的函数一.time()函数time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime中。#include"time.h"voidmain(){time_trawtime;structtm*timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);printf("\007Thecurrentdate/timeis:%s",asctime(timeinfo));exit(0);}=================#include--必须的时间函数头文件time_t--时间类型(time.h定义是typedeflongtime_t;追根溯源,time_t是long)structtm--时间结构,time.h定义如下:inttm_sec;inttm_min;inttm_hour;inttm_mday;inttm_mon;inttm_year;inttm_wday;inttm_yday;inttm_isdst;time(&rawtime);--获取时间,以秒计,从1970年1月一日起算,存于rawtimelocaltime(&rawtime);--转为当地时间,tm时间结构asctime()--转为标准ASCII时间格式:星期月日时:分:秒年-----------------------------------------------------------------------------二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。clock_tclock(void);#includeclock_tt=clock();longsec=t/CLOCKS_PER_SEC;他是记录时钟周期的,实现看来不会很精确,需要试验验证;---------------------------------------------------------------------------三.gettime(&t);据说tc2.0的time结构含有毫秒信息#include#includeintmain(void){structtimet;gettime(&t);printf("Thecurrenttimeis:-:d:d.d\n",t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);return0;}time是一个结构体,,其中成员函数ti_hund是毫秒。。。--------------------------------------------------------------------------------四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;DWORDdwStart=GetTickCount();//这里运行你的程序代码DWORDdwEnd=GetTickCount();则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位这个函数只精确到55ms,1个tick就是55ms。--------------------------------------------------------------------------------五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORDdwStart=timeGetTime();//这里运行你的程序代码DWORDdwEnd=timeGetTime();则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。=========================================//*****************************************************************Unix##unix时间相关,也是标准库的//*********************************************************************1.timegm函数只是将structtm结构转成time_t结构,不使用时区信息;time_ttimegm(structtm*tm);2.mktime使用时区信息time_tmktime(structtm*tm);timelocal函数是GNU扩展的与posix函数mktime相当time_ttimelocal(structtm*tm);3.gmtime函数只是将time_t结构转成structtm结构,不使用时区信息;structtm*gmtime(consttime_t*clock);4.localtime使用时区信息structtm*localtime(consttime_t*clock);1.time获取时间,stime设置时间time_tt;t=time(&t);2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;intstime(time_t*tp)3.UTC=true表示采用夏时制;4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;5.设置时区推荐使用setup来设置;6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln-fs/usr/share/zoneinfo/xxxx/xxx/etc/localtime才能重效time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t看看你的系统是否有time_t64,它能表示更大的时间范围//***************************************************************windows##Window里面的一些不一样的//*********************************************************************一.CTime()类VC编程一般使用CTime类获得当前日期和时间CTimet=GetCurrentTime();SYSTEMTIME结构包含毫秒信息typedefstruct_SYSTEMTIME{WORDwYear;WORDwMonth;WORDwDayOfWeek;WORDwDay;WORDwHour;WORDwMinute;WORDwSecond;WORDwMilliseconds;}SYSTEMTIME,*PSYSTEMTIME;SYSTEMTIMEt1;GetSystemTime(&t1)CTimecurTime(t1);WORDms=t1.wMilliseconds;SYSTEMTIMEsysTm;::GetLocalTime(&sysTm);在time.h中的_strtime()//只能在windows中用chart[11];_strtime(t);puts(t);//*****************************获得当前日期和时间CTimetm=CTime::GetCurrentTime();CStringstr=tm.Format("%Y-%m-%d");在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:CTimet=CTime::GetCurrentTime();//获取系统日期,存储在t里面intd=t.GetDay();//获得当前日期inty=t.GetYear();//获取当前年份intm=t.GetMonth();//获取当前月份inth=t.GetHour();//获取当前为几时intmm=t.GetMinute();//获取当前分钟ints=t.GetSecond();//获取当前秒intw=t.GetDayOfWeek();//获取星期几,注意1为星期天,7为星期六二.CTimeSpan类如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:CTimet1(1999,3,19,22,15,0);CTimet=CTime::GetCurrentTime();CTimeSpanspan=t-t1;//计算当前系统时间与时间t1的间隔intiDay=span.GetDays();//获取这段时间间隔共有多少天intiHour=span.GetTotalHours();//获取总共有多少小时intiMin=span.GetTotalMinutes();//获取总共有多少分钟intiSec=span.GetTotalSeconds();//获取总共有多少秒------------------------------------------------------------------------------三._timeb()函数_timeb定义在SYS\TIMEB.H,有四个fieldsdstflagmillitmtimetimezonevoid_ftime(struct_timeb*timeptr);struct_timebtimebuffer;_ftime(&timebuffer);取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!四.设置计时器定义TIMERID#defineTIMERID_JISUANFANGSHI2在适当的地方设置时钟,需要开始其作用的地方;SetTimer(TIMERID_JISUANFANGSHI,200,NULL);在不需要定时器的时候的时候销毁掉时钟KillTimer(TIMERID_JISUANFANGSHI);对应VC程序的消息映射voidCJisuan::OnTimer(UINTnIDEvent){switch(nIDEvent)}---------------------------------------------------------------------------------------##如何设定当前系统时间---------------------------------------windowsSYSTEMTIMEm_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;m_myLocalTime.wHour=0;m_myLocalTime.wMinute=0;m_myLocalTime.wSec;m_myLocalTime.wMillisec;lpSystemTime=&m_myLocalTime;if(SetLocalTime(lpSystemTime))//此处换成SetSystemTime()也不行MessageBox("OK!");elseMessageBox("Error!");SYSTEMTIMEm_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;lpSystemTime=&m_myLocalTime;if(SetDate(lpSystemTime))//此处换成SetSystemTime()也不行MessageBox("OK!");elseMessageBox("Error!");本文来自CSDN博客,转载请标明出处:/khuang2008/archive/2008/12/09/3483274.aspx一种制作微秒级精度定时器的方法当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。一是用SetTimer函数建立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer函数)。二是利用GetTickCount函数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。下面介绍一种能取得高精度定时的方法。在一些计算机硬件系统中,包含有高精度运行计数器(high-resolutionperformancecounter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。采用这种方法的步骤如下:1、首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。单位是每秒多少次(n/s),此数一般很大。2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。下面举一个例子来演示这种方法的使用及它的精确度。在VC6.0下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFCClassWizard添加的成员变量也分别对应为DWORDm_dwTest和DWORDm_dwAct.“退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFCClassWizard添加此按纽的单击消息处理函数如下:voidCHightTimerDlg::OnBTest(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);//取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中LARGE_INTEGERfrequence;if(!QueryPerformanceFrequency(&frequence))//取高精度运行计数器的频率,若硬件不支持则返回FALSEMessageBox("Yourcomputerhardwaredoesn'tsupportthehigh-resolutionperformancecounter","NotSupport",MB_ICONEXCLAMATION|MB_OK);LARGE_INTEGERtest,ret;test.QuadPart=frequence.QuadPart*m_dwTest/1000000;//通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒ret=MySleep(test);//调用此函数开始延时,返回实际花销的数量m_dwAct=(DWORD)(1000000*ret.QuadPart/frequence.QuadPart);//换算到微秒数UpdateData(FALSE);//显示到对话框面板}其中上面调用的MySleep函数如下:LARGE_INTEGERCHightTimerDlg::MySleep(LARGE_INTEGERInterval)///////////////////////////////////////////////////////////////////////////////////////////////////////////////功能:执行实际的延时功能

//参数:Interval参数为需要执行的延时与时间有关的数量

//返回值:返回此函数执行后实际所用的时间有关的数量

///////////////////////////////////////////////////////////////////////////////////////////////////////////{LARGE_INTEGERprivious,current,Elapse;QueryPerformanceCounter(&privious);current=privious;while(current.QuadPart-privious.QuadPart<Interval.QuadPart)QueryPerformanceCounter(¤t);Elapse.QuadPart=current.QuadPart-privious.QuadPart;returnElapse;}注:别忘了在头文件中为此函数添加函数声明。至此,可以编译和执行此工程了,结果如上图所示。在本人所用的机上(奔腾366,64M内存)测试,当测试时间超过3微秒时,准确度已经非常高了,此时机器执行本身延时函数代码的时间对需要延时的时间影响很小了。上面的函数由于演示测试的需要,没有在函数级封装,下面给出的函数基本上可以以全局函数的形式照搬到别的程序中。BOOLMySleep(DWORDdwInterval)///////////////////////////////////////////////////////////////////////////////////////////////////////////////功能:执行微秒级的延时功能

//参数:Interval参数为需要的延时数(单位:微秒)

//返回值:若计算机硬件不支持此功能,返回FALSE,若函数执行成功,返回TRUE

///////////////////////////////////////////////////////////////////////////////////////////////////////////{BOOLbNormal=TRUE;LARGE_INTEGERfrequence,privious,current,interval;if(!QueryPerformanceFrequency(&frequence)){::MessageBox(NULL,"Yourcomputerhardwaredoesn'tsupportthehigh-resolutionperformancecounter","NotSupport",MB_ICONEXCLAMATION|MB_OK);//或其它的提示信息returnFALSE;}interval.QuadPart=frequence.QuadPart*dwInterval/1000000;bNormal=bNormal&&QueryPerformanceCounter(&privious);current=privious;while(current.QuadPart-privious.QuadPart<interval.QuadPart)bNormal=bNormal&&QueryPerformanceCounter(¤t);returnbNormal;}需要指出的是,由于在此函数中的代码很多,机器在执行这些代码所花费的时间也很长,所以在需要几个微秒的延时时,会影响精度。实际上,读者在熟悉这种方法后,只要使用QueryPerformanceFrequency和QueryPerformanceCounter这两个函数就能按实际需要写出自己的延时代码了。使用CPU时间戳进行高精度计时对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。本文要介绍的,是另一种直接利用PentiumCPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于《Windows图形编程》一书,第15页-17页,有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论,可以参考Intel产品手册。本文仅仅作抛砖之用。在IntelPentium以上级别的CPU中,有一个称为“时间戳(TimeStamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高,因此这个部件可以达到纳秒级的计时精度。这个精确性是上述两种方法所无法比拟的。在Pentium以上的CPU中,提供了一条机器指令RDTSC(ReadTimeStampCounter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样:inlineunsigned__int64GetCycleCount(){__asmRDTSC}但是不行,因为RDTSC不被C++的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31,如下:inlineunsigned__int64GetCycleCount()

{

__asm_emit0x0F

__asm_emit0x31

}

以后在需要计数器的场合,可以像使用普通的Win32API一样,调用两次GetCycleCount函数,比较两个返回值的差,像这样:

unsignedlongt;

t=(unsignedlong)GetCycleCount();

//DoSomethingtime-intensive...

t-=(unsignedlong)GetCycleCount();

《Windows图形编程》第15页编写了一个类,把这个计数器封装起来。有兴趣的读者可以去参考那个类的代码。作者为了更精确的定时,做了一点小小的改进,把执行RDTSC指令的时间,通过连续两次调用GetCycleCount函数计算出来并保存了起来,以后每次计时结束后,都从实际得到的计数中减掉这一小段时间,以得到更准确的计时数字。但我个人觉得这一点点改进意义不大。在我的机器上实测,这条指令大概花掉了几十到100多个周期,在Celeron800MHz的机器上,这不过是十分之一微秒的时间。对大多数应用来说,这点时间完全可以忽略不计;而对那些确实要精确到纳秒数量级的应用来说,这个补偿也过于粗糙了。

这个方法的优点是:

1.高精度。可以直接达到纳秒级的计时精度(在1GHz的CPU上每个时钟周期就是一纳秒),这是其他计时方法所难以企及的。

2.成本低。timeGetTime函数需要链接多媒体库winmm.lib,QueryPerformance*函数根据MSDN的说明,需要硬件的支持(虽然我还没有见过不支持的机器)和KERNEL库的支持,所以二者都只能在Windows平台下使用(关于DOS平台下的高精度计时问题,可以参考《图形程序开发人员指南》,里面有关于控制定时器8253的详细说明)。但RDTSC指令是一条CPU指令,凡是i386平台下Pentium以上的机器均支持,甚至没有平台的限制(我相信i386版本UNIX和Linux下这个方法同样适用,但没有条件试验),而且函数调用的开销是最小的。

3.具有和CPU主频直接对应的速率关系。一个计数相当于1/(CPU主频Hz数)秒,这样只要知道了CP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论