关于异步机制的设计,结果的返回 在和硬件打交道的时候,很多时候需要通过并行来同时对多个硬件进行操作,从而实现软件的响应速度。但是使用并行的机制无非就是:线程、队列、回调通知等等的机制,我使用回调对象机制实现了第一种方案,是通过硬件处理完一个请求后回调一个函数把结果返回的。但总是不太满意。所以,想请教各位,有没有比较简单通俗的设计,或者有哪位对这种并行或者异步机制作过一定研究的,请不吝赐教,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是中断最快了吧。硬件处理完成后,触发硬件中断,然后驱动在isr程序中进行中断响应,在dpc中处理中断。应该说驱动里面都是这样做的。如果应用层,大概就是重叠io了(overlapped)。设置一个event,调用硬件,然后用WaitForSingalObject等待完成。当然回调也很常用。应该没有什么太简单的方法。因为异步处理本身就很麻烦。 先说驱动里面。在驱动初始化的过程中,首先获得硬件设备的所有pnp资源,包括地址空间、io基址、中断向量等。然后将一个isr(中断服务例程)和这个中断向量绑定到一起。再将一个dpc(推迟调用例程)和isr绑定到一起。这样,一旦中断发生后,首先调用isr。isr简单判断一下是否是自己管理的设备发出的中断(因为存在中断复用问题),如果是,就直接调用dpc,然后isr返回。由dpc负责完成剩余的中断处理工作。这样isr能够尽快返回,中断响应能进行的更快速。至于overlapped,就是在readfile,writefile的时候,传入一个event。在硬件出来完成后,会触发这个event。上层设备就可以直接处理返回结果了。这个其实和回调差不多。你完全可以认为回调就是封装了overlapped这部分操作。 我说的硬件不是计算机的硬件,而是一些外部的设备,使用串口来通讯的。这些硬件不支持中断,但支持多线程的并行处理。我想问怎么去设计代码,使得返回结果能够在某个地方被统一的处理,因为异步的返回结果是在硬件操作完成后再返回的。WINDOWS的机制我这里用不上,只能自己去设计一种异步的机制,这种异步机制需要提高速度,架构也需要很容易被理解,以便其他程序员在这种架构上做开发。可能我说得不够清楚,请再赐教,谢谢! 求救。电脑一直都能注册debug版的xx.ocx,但突然现在就不行了。出现LoadLibrary(xx.ocx)失败 - 一个或数个参数无效。为何出现这种情况? Tab 控件的问题... IP控件里填的IP地址怎么转换成字符呢? clistbox 根据情况改变字体颜色 工作2年多了,越来越凄凉,想换换环境了,大家给给意见好吗 透明容器控件的问题 求“球的最小二乘法”的代码 数据源???? 机器启动时的问题,知道的请帮个忙 HttpSendRequest每次请求内存都增加,无法释放是怎么回事 如何把客户坐标转换为世界坐标? 如何使全局变量只读?
应该说驱动里面都是这样做的。如果应用层,大概就是重叠io了(overlapped)。设置一个event,调用硬件,然后用WaitForSingalObject等待完成。
当然回调也很常用。应该没有什么太简单的方法。因为异步处理本身就很麻烦。
这样,一旦中断发生后,首先调用isr。isr简单判断一下是否是自己管理的设备发出的中断(因为存在中断复用问题),如果是,就直接调用dpc,然后isr返回。由dpc负责完成剩余的中断处理工作。这样isr能够尽快返回,中断响应能进行的更快速。至于overlapped,就是在readfile,writefile的时候,传入一个event。在硬件出来完成后,会触发这个event。上层设备就可以直接处理返回结果了。这个其实和回调差不多。你完全可以认为回调就是封装了overlapped这部分操作。