




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络技术专业网络空间安全方向)人才培养方案一、专业名称与代码一)专业名称:计算机网络技术网络空间安全方向)二)专业代码:610202二、入学要求高中阶段教育毕业生或具有同等学力者。三、修业年限全日制3年。实行弹性学制,学生可通过学分认定、积累、转换等办法,在2-6年内完成学业。四、职业面向所属专业大类代码)所属专业类代码)对应行业代码)主要职业类别代码)主要岗位类别或技术领域)职业资格证书或技能等级证书举例电子信息大类61)计算机类6102)互联网安全服务6440)互联网数据服务6450)信息系统集成服务6531)运行维护服务6540)计算机网络技术人员2-02-13-03)网络安全管控
2、与运维、网络攻击的检测与防护、网络系统集成与防护、网络组建与维护华为HCNA网络安全认证、工信部网络信息安全工程师、计算机网络管理员高级)五、培养目标及培养规格一)培养目标培养思想政治坚定、德技并修、全面发展,适应区域经济建设和社会发展各产业领域岗位需要,具有良好的职业素质,掌握网络组建与维护、网络安全管控与运维、网络攻击的检测与防护等知识和技术技能,面向计算机网络领域的高素质技术技能人才。Q0Z9QaflOU二)培养规格1素质1)具有正确的世界观、人生观、价值观。2)崇尚宪法、遵守法律、遵规守纪。具有社会责任感和参与意识。3)具有良好的职业道德和职业素养。4)崇德向善、诚实守信、爱岗敬业,具
3、有精益求精的工匠精神。5)尊重劳动、热爱劳动,具有较强的实践能力。6)具有质量意识、绿色环保意识、安全意识、信息素养、创新精神。7)具有较强的集体意识和团队合作精神,能够进行有效的人际沟通和协作,与社会、自然和谐共处。8)具有职业生涯规划意识。9)具有良好的身心素质和人文素养。10)具有良好的生活习惯、行为习惯和自我管理能力。2知识1)计算机及网络系统的维护和管理的知识。2)网络操作系统的安装、配置、管理的知识。3)中小型数据库的安装、配置、维护、管理的知识。4)常见的系统漏洞、协议、管理、应用等多方面的安全知识。5)主要操作系统的安全配置、管理和优化技术等知识。6)网络攻击与防范技术知识。7
4、)网站前台界面设计与与制作以及模板设计与开发。8)具有技术推广和用户支持所需要的市场营销和人际交往知识。3能力1)具有计算机及网络操作与应用能力。2)熟悉网络攻击与防范技术知识。3)具有网络服务器及操作系统的配置能力。4)熟悉主要操作系统的安全配置、管理和优化技术等知识。5)熟悉常见的系统漏洞、协议、管理、应用等多方面的安全知识。6)具有网站前台界面设计与与制作以及模板设计与开发能力。7)具有企业安全设备的功能测试、设备安装、调试及技术应用维护能力。8)熟悉计算机网络、信息安全的法律、法规和信息安全理论基础知识。六、典型工作任务与职业能力表1 典型工作任务与职业能力表工作岗位典型工作任务职业能
5、力素质、知识、能力)01系统工程技术员01-01从事系统工程建设的技术工作01-01-01服务器及操作系统的选型、安装、维护、优化、备份及恢复。01-01-02常用软件的安装、配置、优化。安全管理。外围设备的安装、维护包括光纤交换设备等)。01-01-03特定系统的服务支持。01-01-04存储备份、容灾的技术支持。01-01-05服务器的管理。应用服务管理。01-01-06企业数据的维护、备份。01-01-07系统平台的升级、迁移、平台侧试。01-01-08系统状态的例行检查、分析、实施报告。01-01-09系统性能、资源、应用状态的实时监控。01-01-10文档的更新。02网络与安全产品销
6、售员02-01销售网络与安全产品02-01-01挖掘、分析潜在客户能力。02-01-02确定客户需求能力。02-01-03给客户演示产品能力。02-01-04参加招投标与签订合同能力。02-01-05交流沟通能力。03网络工程技术员03-01从事网络工程建设的技术工作03-01-01网络规划设计。网络拓扑、IP规划、流量分配等。03-01-02网络环境实施、部署、搭建。网络管理。03-01-03网络布线、设备的安装与维护。03-01-04网络运行、维护、监控、故障排除、优化。03-01-05网络产品与设备的选型。03-01-06网络设备的升级、更新,网管软件的应用。03-01-07工程文档的撰
7、写、归档。04系统集成技术员04-01从事系统集成项目的技术工作04-01-01客户需求调研。04-01-02系统方案设计。系统产品选型。04-01-03项目成本评估。04-01-04售前与售后的技术支持、方案宣讲等。04-01-05硬件环境的搭建、配置。04-01-06系统方案的部署与实施。04-01-07系统集成的招投标过程。05安全顾问05-01从事保障网络安全的技术工作05-01-01收05-01-02安全管理。软件的升级与更新。05-01-03系统安全的规划、设计、加固、优化。05-01-04安全咨询、安全培训、安全标准咨询等。05-01-05安全评估建议。评估、规划、整改方案。05
8、-01-06安全审核。渗透测试。病毒的分析、防御与查杀。06网站安全设计员06-01从事网站的开发、设计与安全管理06-01-01设计方案交流。06-01-02网站框架设计、美工。脚本设计。06-01-03内容管理系统模板页面设计。06-01-04网站空间的安全与管理。06-01-05网站维护、更新。七、主要课程简介1网络管理技术该课程面向培养网络产品的安装、调试和维护能力等职业岗位为核心技能。目标是让学生掌握中型网络结构、绘制网络拓扑图、规划网络地址、路由器与交换机的基本配置、静态与动态路由配置、访问控制管理、虚拟局域网配置。Q0Z9QaflOU2Web安全防护该课程主要内容包括Web安全与
9、防范基础介绍、各类基本漏洞的原理及攻防技术对抗方法、Web安全测试方法、Web常见漏洞介绍、常见的防护设备、Web防护体系建议、渗透测试方法及快速代码审计实践,深入了解在Web安全防护体系中的各部分基础内容及开展方式等。Q0Z9QaflOU内容包括Web安全基础介绍、Web安全测试方法、Web常见漏洞介绍、Web安全实战演练、日常安全意识。Q0Z9QaflOU3服务器配置与加固以网络服务器的配置与管理为中心,以Windows&Linux为平台,采用“行动导向、任务驱动”的模式,根据岗位工作的实际需要,将网络服务器的配置与管理融汇到动手实践中。全面详细的介绍了中小型网络服务与安全的规划设计、配置
10、与管理等全部网络服务管理技术,主要内容有Widows&Linux的安装、DNS服务器、DHCP服务器的配置,Web服务器、FTP服务器、认证服务器、VPN服务器等网络服务器的配置与管理等。Q0Z9QaflOU4网络攻防技术本课程以基于信息安全攻防平台系统进行网络攻防实验,课程中每个实验通过背景描述和工作原理对我们所处网络的信息安全现状和实验原理进行分析,以使学生更好地理解网络攻防技术。然后用基于虚拟靶机的实验方法,通过详细的实验步骤,对攻防技术的实现进行实际操作,并在实验后通过问题答辩温习、巩固攻防技术的知识。Q0Z9QaflOU八、毕业要求1学分要求本专业学生在毕业前必须修满140学分。2职
11、业资格证书要求本专业学生在毕业前必须取得人力资源和社会保障部颁发的计算机网络管理员高级)职业资格证书、华为信息与网络技术学院的HCNA认证、工业和信息化部的网络工程师认证、教育部考试中心的计算机等级考试三级网络证书中的一种。Q0Z9QaflOU九、实施保障1师资队伍计算机网络技术专业现有专兼职教师18名,其中专任教师10名,行业、企业兼职教师8名。专任教师中教授2名,副教授副高职称)3名,具有硕士学位的5名,专任教师中2人具有工程师专业技术职称,2人具有网络工程师,2人具有网络综合布线工程技术认证工程师,2人具有华为认证讲师,1人具有华为HCIE高级职业资格认证,5人具有高级考评员职业资格。专
12、任教师均具有企业生产一线工作或实践经历,实践教学能力强。兼职教师为来自行业企业的技术骨干、高级工程师,有较强的理论知识和教学能力。Q0Z9QaflOU2教学设施具有网络管理实训室、网络安全实训室、网站建设实训室、华为网络实训室、组装维护实训室、物联网实训室、移动互联实训室、云计算实训室、大数据实训室等专业实训室。教学设施满足本专业人才培养实施需要,其中实训实验)室面积、设施等应达到国家发布的有关专业实训教学条件建设标准仪器设备配备规范)要求。信息化条件保障应能满足专业建设、教学管理、信息化教学和学生自主学习需要。Q0Z9QaflOU3教学资源学院图书馆具有丰富的专业图书资源和数字教学资源,每门
13、课程有相应的教材或者自编讲义,专业建设有教学资源库、在线课程等能够满足学生专业学习、教师专业教学研究、教学实施和社会服务需要。严格执行国家和省区、市)关于教材选用的有关要求,健全本校教材选用制度。根据需要组织编写校本教材,开发教学资源。Q0Z9QaflOU4教学方法教师依据专业培养目标、课程教学要求、学生能力与教学资源,采用理实一体化教学、案例教学、项目教学等教学方法,以达成预期教学目标。倡导因材施教、因需施教,鼓励创新教学方法和策略,坚持学中做、做中学。Q0Z9QaflOU5教学评价对学生的学业考核评价内容兼顾认知、技能、情感等方面,评价体现评价标准、评价主体、评价方式、评价过程采用多元化的
14、评价方式,如观察、口试、笔试、顶岗操作、职业技能大赛、职业资格鉴定等评价、评定方式。加强对教学过程的质量监控,改革教学评价的标准和方法。Q0Z9QaflOU6质量管理明确教学管理和教学动作的具体要求,强化对教师的备课、上课、学生辅导、阶段测查过程管理要求,形成科学严谨的教学习惯。学期初检查授课教师的课程标准、授课计划。期中跟踪检查是否按照教学计划以及其教学方案实施,责任教学的主管领导每学期进班听课,组织听评课活动。每学期定期组织师资培训,提高教师专业能力。结合系部、教务处的教学评价反馈,定期开展教学诊改活动。Q0Z9QaflOU十、人才培养进程安排1专业教学计划表表2 计算机网络技术专业网络空
15、间安全方向)教学计划表备注:1课程类型:A表示纯理论课。B表示理论+实践课。C表示纯实践课。2表示线上课程。2学时与学分分配表3 学时与学分分配表课程类别学分数学时数学时数占总学时百分比%)实践学时占总学时百分比%)公共基础及素质教育模块必修课3750219.71425.6限选课91646.400任选课4642.500小 计5073028.61425.6专业基础模块必修课2751820.334813.6限选课2321.3200.8小 计2955021.636814.4专业技能模块必修课4194036.982032.1限选课2341.3220.9任选课3481.900小 计46102240.18
16、4233创新创业模块必修课152469.71927.5小 计152469.71927.5总 计1402548100154460.64素质教育实践安排表5 计算机网络技术专业网络空间安全方向)素质教育实践安排表课程名称考查学期学分要求每学期学时要求责任部门一二三四五六素质教育实践1-4816161616学生处团 委各系部形式学期名称具体要求学期学时学期学分学分素质教育实践1-4社团活动必修80.52项目化第二课堂活动迎新文艺晚会具体学时认定按照学生综合素质测评实施办法试行)文件实施814爱国主义教育活动学院科技文化艺术节大学生足球联赛大学生篮球联赛大学生排球联赛综合素养展示大会学院运动会宿舍文化
17、艺术节春季趣味运动会“五四”校园文化成果展演纪念“一二九”运动合唱比赛河南省大学生科技文化艺术节活动河南省“挑战杯”大学生课外学术作品科技大赛专业技能大赛校外实践活动社会实践及调研活动每学期社会实践活动一周以上赋予综合素养学分0.5分2志愿服务活动学院对素质教育实践实施统一管理,总学分为8学分。其中社团活动8学时,2学分。项目化第二课堂活动8学时,4学分。校外实践活动2学分。学时学分认定由学生处、团委、各系部责任。Q0Z9QaflOU5创新创业实践安排表6 计算机网络技术专业网络空间安全方向)创新创业实践安排表名 称考查学期学分要求每学期学分要求一二三四五六创新创业教育1-4422学期项目名称
18、具体要求学分1-2创新创业报告会参加者0.5职业生涯规划大赛参加者0.5创新创业大赛参加者0.5创新创业项目实施参加者0.5寒暑假参与创业实践活动参加者0.5系部技术协同创新项目参加者0.5系部创新创业工作室实践活动参加者0.5创新创业培训参加者0.5职业生涯规划协会参加者0.5创新创业协会参加者0.53-4创新创业报告会参加者0.5职业生涯规划大赛参加者0.5创新创业大赛参加者0.5创新创业项目实施参加者0.5寒暑假参与创业实践活动参加者0.5系部技术协同创新项目参加者0.5系部创新创业工作室实践活动参加者0.5创新创业培训参加者0.5职业生涯规划协会参加者0.5创新创业协会参加者0.5学院
19、对素质教育实践实施统一管理,总学分为4学分,按学年进行统计,学分认定由创新创业教育学院和各系部责任。Q0Z9QaflOU附录资料:不需要的可以自行删除C语言中如何获取时间?精度如何?1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用MFC的CTime类,可以用CTime:GetCurrent
20、Time() 精确到秒6 要获取高精度时间,可以使用BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。7 Multimedia Timer FunctionsThe following functions are used with multimedia timers.timeBeginPeriod/timeEndP
21、eriod/timeGetDevCaps/timeGetSystemTime/*/用标准C实现获取当前系统时间的函数一.time()函数time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。#include time.hvoid main ()time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );printf ( 007The current date/time is: %s, asctime (timeinfo) )
22、;exit(0);=#include - 必须的时间函数头文件time_t - 时间类型(time.h 定义是typedef long time_t; 追根溯源,time_t是long)struct tm - 时间结构,time.h 定义如下:int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;time ( &rawtime ); - 获取时间,以秒计,从1970年1月一日起算,存于rawtimelocaltime ( &rawtime
23、 ); - 转为当地时间,tm 时间结构asctime ()- 转为标准ASCII时间格式:星期 月 日 时:分:秒 年-二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。clock_t clock ( void );#includeclock_t t = clock();long sec = t / CLOCKS_PER_SEC;他是记录时钟周期的,实现看来不会很精确,需要试验验证;-三.gettime(&t); 据说tc2.0的time结构含有毫秒信息#include#includeint mai
24、n(void)struct time t;gettime(&t);printf(The current time is: -:d:d.dn,t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);return 0;time 是一个结构体, 其中成员函数 ti_hund 是毫秒。-四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;DWORD dwStart = GetTickCount();/这里运行你的程序代码DWORD dwEnd = GetTickCount();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒
25、为单位这个函数只精确到55ms,1个tick就是55ms。-五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();/这里运行你的程序代码DWORD dwEnd = timeGetTime();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。=/*Unix#unix时间相关,也是标准库的/*1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;time_t timegm(struc
26、t tm *tm);2.mktime使用时区信息time_t mktime(struct tm *tm);timelocal 函数是GNU扩展的与posix函数mktime相当time_t timelocal (struct tm *tm);3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;struct tm * gmtime(const time_t *clock);4.localtime使用时区信息struct tm * localtime(const time_t *clock);1.time获取时间,stime设置时间time_t t;t = tim
27、e(&t);2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;int stime(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看看你的
28、系统是否有time_t64,它能表示更大的时间范围/*windows#Window里面的一些不一样的/*一.CTime () 类VC编程一般使用CTime类 获得当前日期和时间CTime t = GetCurrentTime();SYSTEMTIME 结构包含毫秒信息typedef struct _SYSTEMTIME WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds; SYSTEMTIME, *PSYSTEMTIME;SYSTEMTI
29、ME t1;GetSystemTime(&t1)CTime curTime(t1);WORD ms = t1.wMilliseconds;SYSTEMTIME sysTm;:GetLocalTime(&sysTm);在time.h中的_strtime() /只能在windows中用char t11;_strtime(t);puts(t);/*获得当前日期和时间CTime tm=CTime:GetCurrentTime();CString str=tm.Format(%Y-%m-%d);在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:CTime t = CTime:G
30、etCurrentTime(); /获取系统日期,存储在t里面int d=t.GetDay(); /获得当前日期int y=t.GetYear(); /获取当前年份int m=t.GetMonth(); /获取当前月份int h=t.GetHour(); /获取当前为几时int mm=t.GetMinute(); /获取当前分钟int s=t.GetSecond(); /获取当前秒int w=t.GetDayOfWeek(); /获取星期几,注意1为星期天,7为星期六二.CTimeSpan类如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:CTime t1( 1999,
31、 3, 19, 22, 15, 0 );CTime t = CTime:GetCurrentTime();CTimeSpan span=t-t1; /计算当前系统时间与时间t1的间隔int iDay=span.GetDays(); /获取这段时间间隔共有多少天int iHour=span.GetTotalHours(); /获取总共有多少小时int iMin=span.GetTotalMinutes();/获取总共有多少分钟int iSec=span.GetTotalSeconds();/获取总共有多少秒-三._timeb()函数_timeb定义在SYSTIMEB.H,有四个fieldsdst
32、flagmillitmtimetimezonevoid _ftime( struct _timeb *timeptr );struct _timeb timebuffer;_ftime( &timebuffer );取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!四.设置计时器定义TIMER ID#define TIMERID_JISUANFANGSHI 2在适当的地方设置时钟,需要开始其作用的地方;SetTimer(TIMERID_JISUANFANGSHI,200,NULL);在不需要定时器的时候的时候销毁掉时钟KillTimer(TIMERID_JISUANFANGSHI);
33、对应VC程序的消息映射void CJisuan:OnTimer(UINT nIDEvent)switch(nIDEvent)-#如何设定当前系统时间-windowsSYSTEMTIME m_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
34、;if( SetLocalTime(lpSystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);SYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;lpSystemTime=&m_myLocalTime;if( SetDate(lpSystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);
35、elseMessageBox(Error !);本文来自CSDN博客,转载请标明出处:HYPERLINK /khuang2008/archive/2008/12/09/3483274.aspx/khuang2008/archive/2008/12/09/3483274.aspx一种制作微秒级精度定时器的方法当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。一是用SetTimer函数建立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer
36、函数)。二是利用GetTickCount函数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。下面介绍一种能取得高精度定时的方法。在一些计算机硬件系统中,包含有高精度运行计数器(high-resolution performance counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。采用这种方法的步骤如下:1、首先调用QueryPerfo
37、rmanceFrequency函数取得高精度运行计数器的频率f。单位是每秒多少次(n/s),此数一般很大。2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。下面举一个例子来演示这种方法的使用及它的精确度。在VC 6.0 下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFC ClassWizar
38、d添加的成员变量也分别对应为DWORD m_dwTest和DWORD m_dwAct. “退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC ClassWizard添加此按纽的单击消息处理函数如下:void CHightTimerDlg:OnBTest()/ TODO: Add your control notification handler code hereUpdateData(TRUE); /取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中LARGE_INTEGER frequence;if(!QueryPerformanceFrequenc
39、y( &frequence) /取高精度运行计数器的频率,若硬件不支持则返回FALSEMessageBox(Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK);LARGE_INTEGER test, ret;test.QuadPart = frequence.QuadPart * m_dwTest / 1000000; /通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒ret = M
40、ySleep( test ); /调用此函数开始延时,返回实际花销的数量m_dwAct = (DWORD)(1000000 * ret.QuadPart / frequence.QuadPart ); /换算到微秒数UpdateData(FALSE); /显示到对话框面板其中上面调用的MySleep函数如下:LARGE_INTEGER CHightTimerDlg:MySleep(LARGE_INTEGER Interval)/ 功能:执行实际的延时功能 / 参数:Interval 参数为需要执行的延时与时间有关的数量 / 返回值:返回此函数执行后实际所用的时间有关的数量 / LARGE_IN
41、TEGER privious, current, Elapse;QueryPerformanceCounter( &privious );current = privious;while( current.QuadPart - privious.QuadPart Interval.QuadPart )QueryPerformanceCounter( t );Elapse.QuadPart = current.QuadPart - privious.QuadPart;return Elapse;注:别忘了在头文件中为此函数添加函数声明。至此,可以编译和执行此工程了,结果如上图所示。在本人所用的机
42、上(奔腾366, 64M内存)测试,当测试时间超过3微秒时,准确度已经非常高了,此时机器执行本身延时函数代码的时间对需要延时的时间影响很小了。上面的函数由于演示测试的需要,没有在函数级封装,下面给出的函数基本上可以以全局函数的形式照搬到别的程序中。BOOL MySleep(DWORD dwInterval)/ 功能:执行微秒级的延时功能 / 参数:Interval 参数为需要的延时数(单位:微秒) / 返回值:若计算机硬件不支持此功能,返回FALSE,若函数执行成功,返回TRUE / BOOL bNormal = TRUE;LARGE_INTEGER frequence, privious,
43、current, interval;if(!QueryPerformanceFrequency( &frequence):MessageBox(NULL, Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK); /或其它的提示信息return FALSE;interval.QuadPart = frequence.QuadPart * dwInterval / 1000000;bNormal = bNormal
44、& QueryPerformanceCounter( &privious );current = privious;while( current.QuadPart - privious.QuadPart interval.QuadPart )bNormal = bNormal & QueryPerformanceCounter( t );return bNormal;需要指出的是,由于在此函数中的代码很多,机器在执行这些代码所花费的时间也很长,所以在需要几个微秒的延时时,会影响精度。实际上,读者在熟悉这种方法后,只要使用QueryPerformanceFrequency和QueryPerfor
45、manceCounter这两个函数就能按实际需要写出自己的延时代码了。使用CPU时间戳进行高精度计时对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒
46、体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。本文要介绍的,是另一种直接利用Pentium CPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于Windows图形编程一书,第15页17页,有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论,可以参考Intel产品手册。本文仅仅作抛砖之用。在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主
47、频都非常高,因此这个部件可以达到纳秒级的计时精度。这个精确性是上述两种方法所无法比拟的。在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C+语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样:inline unsigned _int64 GetCycleCount() _asm RDTSC 但是不行,因为RDTSC不被C+的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码
48、形式0X0F、0X31,如下:inline unsigned _int64 GetCycleCount() _asm _emit 0 x0F _asm _emit 0 x31 以后在需要计数器的场合,可以像使用普通的Win32 API一样,调用两次GetCycleCount函数,比较两个返回值的差,像这样: unsigned long t; t = (unsigned long)GetCycleCount(); /Do Something time-intensive . t -= (unsigned long)GetCycleCount(); Windows图形编程第15页编写了一个类,把这
49、个计数器封装起来。有兴趣的读者可以去参考那个类的代码。作者为了更精确的定时,做了一点小小的改进,把执行RDTSC指令的时间,通过连续两次调用GetCycleCount函数计算出来并保存了起来,以后每次计时结束后,都从实际得到的计数中减掉这一小段时间,以得到更准确的计时数字。但我个人觉得这一点点改进意义不大。在我的机器上实测,这条指令大概花掉了几十到100多个周期,在Celeron 800MHz的机器上,这不过是十分之一微秒的时间。对大多数应用来说,这点时间完全可以忽略不计;而对那些确实要精确到纳秒数量级的应用来说,这个补偿也过于粗糙了。 这个方法的优点是: 1.高精度。可以直接达到纳秒级的计时
50、精度(在1GHz的CPU上每个时钟周期就是一纳秒),这是其他计时方法所难以企及的。 2.成本低。timeGetTime 函数需要链接多媒体库winmm.lib,QueryPerformance* 函数根据MSDN的说明,需要硬件的支持(虽然我还没有见过不支持的机器)和KERNEL库的支持,所以二者都只能在Windows平台下使用(关于DOS平台下的高精度计时问题,可以参考图形程序开发人员指南,里面有关于控制定时器8253的详细说明)。但RDTSC指令是一条CPU指令,凡是i386平台下Pentium以上的机器均支持,甚至没有平台的限制(我相信i386版本UNIX和Linux下这个方法同样适用,但没有条件试验),而且函数调用的开销是最小的。 3.具有和CPU主频直接对应的速率关系。一个计数相当于1/(CPU主频Hz数)秒,这样只要知道了CPU的主频,可以直接计算出时间。这和QueryPerformanceCount不同,后者需要通过QueryPerformanceFrequency获取当前计数器每秒的计数次数才能换算成时间。 这个方法的缺点是: 1.现有的C/C+编译器多数不直接支持使用RDTSC指令,需要用直
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电子美容仪合作协议书
- 2025年磁卡宽片项目建议书
- 葡萄酒产业生态链投资与窖藏仓储合作合同
- 氢燃料电池系统环境适应性测试员协议
- 红筹架构下合资企业股权合作与收益分配协议
- 装载机司机培训课程大纲
- 医疗查房车租赁及远程医疗诊断服务合同
- Web前端开发技术项目教程(HTML5 CSS3 JavaScript)(微课版) 课件 6.2.4知识点3:CSS3图片边框属性
- 电商商品上架与用户隐私保护服务合同
- 国际旅行者数据加密海外医疗保险租赁合同
- 中国糖尿病防治指南(2024版)图文完整版
- 第四批四川省高校重点实验室名单
- 《糖尿病酮症酸中毒》课件
- 2024年南昌市公安局招聘省级留置看护辅警考试真题
- 脾破裂的应急处理流程
- 《毕节,我的家乡》课件
- 2023医院全员绩效考核实施方案(详细版)
- 新闻记者职业资格《新闻采编实务》考试题库(含答案)
- 【MOOC】人工智能:模型与算法-浙江大学 中国大学慕课MOOC答案
- 《物理化学》第二章-热力学第一定律课件
- 电力工程监理规划
评论
0/150
提交评论