vc++ 6.0在windows下运行的时间不准确 如何设置内部中断
用vc++6.0编程,为了记录实际运行时间,可是在windows环境下是多任务的,据说c/c++可以通过设置内部中断,使其类似于在DOS那样的单任务的运行,这个怎么做?或...
用vc++ 6.0编程,为了记录实际运行时间,可是在windows环境下是多任务的,据说c/c++可以通过设置内部中断,使其类似于在DOS那样的单任务的运行,这个怎么做?
或者可以帮忙给出怎么查找这方面资料的关键词吗?(我都不知道从哪方面去查)
谢谢,谢谢!^_^ 展开
或者可以帮忙给出怎么查找这方面资料的关键词吗?(我都不知道从哪方面去查)
谢谢,谢谢!^_^ 展开
1个回答
展开全部
描述比较模糊。
时间“不准确”和多任务没有什么关系。
如果是希望获取高精度时间,可以使用汇编内嵌的方式,通过中断获取CPU时间戳,这个可以获取最高精度时间,在windows下,也可以通过函数QueryPerformanceCounter获取并计算,同样可以获取这个最高精度。两种方法的效果一致。
这个比GetTickCount和GetLocalTime获取的毫秒精度要高一些(这两个Get实际精度在10ms以上),但对硬件设备有依赖,如果不支持时间戳中断,那么实际还是使用的这两个Get(目前不支持的很少了)
时间“不准确”和多任务没有什么关系。
如果是希望获取高精度时间,可以使用汇编内嵌的方式,通过中断获取CPU时间戳,这个可以获取最高精度时间,在windows下,也可以通过函数QueryPerformanceCounter获取并计算,同样可以获取这个最高精度。两种方法的效果一致。
这个比GetTickCount和GetLocalTime获取的毫秒精度要高一些(这两个Get实际精度在10ms以上),但对硬件设备有依赖,如果不支持时间戳中断,那么实际还是使用的这两个Get(目前不支持的很少了)
追问
先谢谢回答!
我不是很了解这方面的问题。
在windows环境下,不只是我所编的程序在运行,是多个进程同时进行,那么所得到的时间肯定会不准确。我是听老师这样说的。
如果从这个角度来看,那么怎样使得在调用某个特定程序的时候,整个环境下只有这一个进程在进行呢?
追答
windows操作系统本身,就是基于多线程多任务的,在应用层面上,不支持进程独占机制。
要做到只有一个进程,是很困难的,你必须在驱动层面上,使用ring0级的中断(并且同时系统不能有其它ring0),挂起其它进程,这相当于将windows作为自己的子系统存在,很少有软件这样做(当然也有,比如softiCE)。
我认为,你老师的说法,是不严格的。这个“不准确”要看是在哪一个层面上,如果是在毫秒层面,那么多线程不会影响精确度,因为线程的时间片分配,是基于CPU主频时间分配的,处于微妙级别以上。也就是说,在当前主流CPU下,即使有其它程序干扰,获取准确的微妙级时间是没有问题的。
而在纳秒级别上,时间的准确度依赖于CPU主频,那么即使你直接进程独占,使用汇编中断获取时间戳,所获取的精度也是依赖于主频,在不同的电脑上得到的结果也是不一样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询