薛宗棋
驱动牛犊
驱动牛犊
  • 注册日期2001-09-15
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2488回复:3

请问如何在kernel驱动程序中用定时器? 有这么一个东东么? 如果没有的化,或者要启动一个线程?

楼主#
更多 发布于:2001-09-20 19:42
  ?

最新喜欢:

xiangshifuxiangs...
no
eric_ti
驱动牛犊
驱动牛犊
  • 注册日期2001-03-27
  • 最后登录2003-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-21 16:38
可以用定时器派发对象例子如下:
 KeInitializeTimerEx(&TransferExtension>Timer,SynchronizationEvent);//初始化定时器时间

KeInitializeDpc(&TransferExtension->Dpc,
                     callbackfunction,
                    TransferExtension);
//初始化时间分发例程
    dueTime.QuadPart = -10000 * 2;//2ms 时间间隔
    inQueue = KeSetTimer(&TransferExtension->Timer,
                         dueTime,
                         &TransferExtension->Dpc);  
器中递归的调用callbackfunction即可。  
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-21 13:29
[QUOTE]原本由 薛宗棋 发表
[B]  ? [/B][/QUOTE]
先:
LARGE_INTEGER StartTickCount;
KeQueryTickCount( &StartTickCount);
ULONG UnitsOf100ns = KeQueryTimeIncrement();
在Loop中:

LARGE_INTEGER TickCountNow;
KeQueryTickCount( &TickCountNow);
ULONG ticks = (ULONG)(TickCountNow.QuadPart - StartTickCount.QuadPart);
if( ticks*UnitsOf100ns/10000000 >= dx->UsbTimeout)
{
status = STATUS_NO_MEDIA_IN_DEVICE;
break;
}

就可以了!
如果可以请给分???呵呵!
喜欢清静?享受人生
无心化语
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分-103分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2001-09-21 08:15
用户被禁言,该主题自动屏蔽!
游客

返回顶部