延迟过程调用
来源:互联网 发布:淘宝延迟收货可以多久 编辑:程序博客网 时间:2024/05/22 14:40
延迟过程调用,即 DPC。
这是一种机制,当上层请求下来,由于过多的操作步骤,为了使系统性能更好,使用一个完成调用例程,告诉上层“我完成了”,这样就可以处理下面的请求了,而系统会把剩下得处理过程加入到一个叫做DPC的队列中,等系统有空时,再来调用。这就是--延迟过程调用。
说白了,就是一种缓冲机制。
这是系统控制的。几乎每种现代操作系统都有这样的类似机制。
延时过程调用的应用延时调用可用在Windows驱动程序的中断处理中。由于中断处理的中断级别较高--在DIRQL级别,所以应该使其执行时间尽可能短。于是一般的情况是在中断处理程序里判断中断发生,然后调用延时过程调用例程实现中断程序的功能。说明如下:? 当硬件设备产生中断请求时,驱动程序则需要注册一个处理程序,在中断到达时进行正确的处理。在DriverWorks中通过 KInterrupt类实现硬件中断处理,该类封装了IoConnectInterrupt函数来初始化中断及将一个中断服务例程连接到一个中断上。中断 服务例程是运行在DIRQL级别上,因此处理时间应该尽可能的短,并且在该级别上还有很多内核函数不能调用。所以一般在中断服务例程中只判断该中断是否由 自己的设备产生,若是则调用一个在DISPATCH_LEVEL级别上运行的延迟过程调用。在延迟过程调用例程中可完成大部分的中断处理工作。
例如,在中断服务程序中通过判断是不是该设备产生的中断,以响应中断(以下程序都只给出关键代码):
?status?=?m_IoPortRange0.ind(INTCSR);?//获取设备的中断状态
?if?((status?&?0x800000)?!=?0x800000) {?return?FALSE;?}
?//判断是不是由该设备产生的中断,如果不是则返回
?m_IoPortRange0.outd(INTCSR,?status?&?0xff02ffff); //屏蔽中断
?if?(!m_DpcFor_Irq.Request(NULL,?NULL))?; //调用延时过程调用例程,处理中断事件?
这是一种机制,当上层请求下来,由于过多的操作步骤,为了使系统性能更好,使用一个完成调用例程,告诉上层“我完成了”,这样就可以处理下面的请求了,而系统会把剩下得处理过程加入到一个叫做DPC的队列中,等系统有空时,再来调用。这就是--延迟过程调用。
说白了,就是一种缓冲机制。
这是系统控制的。几乎每种现代操作系统都有这样的类似机制。
延时过程调用的应用延时调用可用在Windows驱动程序的中断处理中。由于中断处理的中断级别较高--在DIRQL级别,所以应该使其执行时间尽可能短。于是一般的情况是在中断处理程序里判断中断发生,然后调用延时过程调用例程实现中断程序的功能。说明如下:? 当硬件设备产生中断请求时,驱动程序则需要注册一个处理程序,在中断到达时进行正确的处理。在DriverWorks中通过 KInterrupt类实现硬件中断处理,该类封装了IoConnectInterrupt函数来初始化中断及将一个中断服务例程连接到一个中断上。中断 服务例程是运行在DIRQL级别上,因此处理时间应该尽可能的短,并且在该级别上还有很多内核函数不能调用。所以一般在中断服务例程中只判断该中断是否由 自己的设备产生,若是则调用一个在DISPATCH_LEVEL级别上运行的延迟过程调用。在延迟过程调用例程中可完成大部分的中断处理工作。
例如,在中断服务程序中通过判断是不是该设备产生的中断,以响应中断(以下程序都只给出关键代码):
?status?=?m_IoPortRange0.ind(INTCSR);?//获取设备的中断状态
?if?((status?&?0x800000)?!=?0x800000) {?return?FALSE;?}
?//判断是不是由该设备产生的中断,如果不是则返回
?m_IoPortRange0.outd(INTCSR,?status?&?0xff02ffff); //屏蔽中断
?if?(!m_DpcFor_Irq.Request(NULL,?NULL))?; //调用延时过程调用例程,处理中断事件?
- DPC 延迟过程调用
- DPC 延迟过程调用
- 延迟过程调用
- DPC延迟过程调用
- 延迟过程调用/异步过程调用APC
- DPC(延迟过程调用)的技术细节
- DPC(延迟过程调用)的技术细节
- Deferred Procedure Call Details(延迟过程调用详解)
- Deferred Procedure Call Details(延迟过程调用详解)
- mybatis-06-调用存储过程&延迟加载&查询缓存
- iOS延迟调用和取消延迟调用
- 关于延迟调用
- 延迟调用performSelector介绍
- Unity延迟调用
- 单线程延迟调用
- OCiOS开发:延迟调用
- 网络系统调用延迟
- Unity 函数延迟调用
- Ubuntu下使用SVN
- 数据区,代码区,堆栈区,操作系统堆栈
- 工作之余写点阻抗模式控制算法
- 连接查询
- Unable to find the requested .Net Framework Data Provider. It may not be installed
- 延迟过程调用
- centos fedora nfs kermit tftp 配置
- java程序编译运行
- namenode错误日志
- jobtracker错误
- 支持向量机的实用指导
- ARM GCC浮点编译选项
- 数据库列名无效
- 修改mini6410 的IP地址