我刚开始学习WINDOWS下驱动编程。看到书上说在DISPATCH_LEVEL下,不会发生普通线程的切换。但我调试的一个范例中,
设备IRP串行操作处理的StartIO函数是在DISPATCH_LEVEL下执行,
在StartIO中加入了一个10秒的等待。
但是在调试的时候,当执行StartIO的时候,发现其他的线程仍然能正常的运行,没有发现有卡死或者无响应的情况。
想请教一下,这是什么原因?我的电脑是双核的,调试环境用的是VC6.0, Windows DDK 2600

解决方案 »

  1.   

    但是书上为什么说DISPATCH_LEVEL不会有线程切换?
      

  2.   

    不会被切换是指自己不会被切换,比如你在执行一个例程的时候这时CPU不会从这个例程当中切换走,这样就可以保证你的例程可以做为一个整体执行完成,不会被其他线程打断,达到同步的效果,就像自旋锁一样。以上为个人理解,仅供参考。
      

  3.   

    还是没明白。
    既然这个例程是一个完整执行体,CPU不会切换走,那我在例程里等待10秒,CPU不是同样也不会切换走,直到我完成这个例程,CPU才可能切换到去执行其他线程?
      

  4.   

    sleep()的作用就是让CPU进行时间片的轮转,还有所谓的内核DISPATCH_LEVEL不会有线程切换,是指在内核级别上不会有其他同级别的线程进行抢占,比DISPATCH_LEVEL更高的是Device IRQL,它是用来处理设备中断的,如果是这一级别就会对运行的线程进行抢占。此外,这里所说的都是内核级的线程,用户态的线程都是可以正常执行的,windows是一个多进程的操作系统,不会就这么卡死的。