能力值:
( LV9,RANK:250 )
|
-
-
2 楼
貌似windows的轮询就是50以上,也就是说sleep(50)以上才算有效果,以下就=50了
记得是50,请大家指正
|
能力值:
( LV12,RANK:760 )
|
-
-
3 楼
ZwYieldExecution
或者是
ZwDelayExecution
很久不涉及这个已经有些遗忘了,还有那个KeDelayExecutionThread啥来着
···
|
能力值:
( LV12,RANK:760 )
|
-
-
4 楼
可以直接在驱动里做延时,然后callbacktousermode一下~~
|
能力值:
(RANK:1010 )
|
-
-
5 楼
#include <mmsystem.h>
#pragma comment (lib,"winmm.lib")
使用前:
timeBeginPeriod ( 1 ) ; // 设置为精度1ms
创建个内核事件对象
HANDLE hEvent = CreateEvent ( …… ) ; // 只用于WaitForSingleObject ,不用设置信号
这个事件只用于:
WaitForSingleObject ( hEvent, 1 ) ;
这样就可实现精确定时。
除了定时。当线程比较繁忙时,用这么一招,往往可以降低CPU占用率
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
在我这里的双核机器上,主线程发出一个信号立刻sleep,另一个线程接到信号立刻输出耗时,一般耗时20ms左右,不知道双核和单核的机器上是否相同
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
这个最简单,我试一下,驱动不会写,调用zw开头的函数也不会,正在学,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
经过测试,北极星的方法可行,不过有些问题出现.
timeBeginPeriod(1);
m_hEvent=::CreateEvent(NULL,TRUE,FALSE,NULL);
InitBenchmark();//初始化计时器
BM_START(1);//开始计时
for(int i=0;i<100;i++)
{
::WaitForSingleObject(m_hEvent,1);
}
BM_END(1);//停止计时
timeEndPeriod(1);
ConsoleWrite();//输出计时结果
循环100次的时候,耗时要么是150ms左右,要么是200ms左右.
但是如果只进行一次的时候,有1900us(1.9ms)的,有15000us(15ms)的,也有6200us(6.2ms)的,还有-44000us(-4.4ms)的.很奇怪的是,基本只有这几种结果,其中15ms出现得最多.这是什么原因呢?
|
能力值:
(RANK:1010 )
|
-
-
9 楼
你用的是高精度计时?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
恩,是用QueryPerformanceCounter来计算的,是它测量有问题吗?
|
|
|