在和硬件打交道的时候,很多时候需要通过并行来同时对多个硬件进行操作,从而实现软件的响应速度。但是使用并行的机制无非就是:线程、队列、回调通知等等的机制,我使用回调对象机制实现了第一种方案,是通过硬件处理完一个请求后回调一个函数把结果返回的。但总是不太满意。所以,想请教各位,有没有比较简单通俗的设计,或者有哪位对这种并行或者异步机制作过一定研究的,请不吝赐教,谢谢!

解决方案 »

  1.   

    应该是中断最快了吧。硬件处理完成后,触发硬件中断,然后驱动在isr程序中进行中断响应,在dpc中处理中断。
    应该说驱动里面都是这样做的。如果应用层,大概就是重叠io了(overlapped)。设置一个event,调用硬件,然后用WaitForSingalObject等待完成。
    当然回调也很常用。应该没有什么太简单的方法。因为异步处理本身就很麻烦。
      

  2.   

    先说驱动里面。在驱动初始化的过程中,首先获得硬件设备的所有pnp资源,包括地址空间、io基址、中断向量等。然后将一个isr(中断服务例程)和这个中断向量绑定到一起。再将一个dpc(推迟调用例程)和isr绑定到一起。
    这样,一旦中断发生后,首先调用isr。isr简单判断一下是否是自己管理的设备发出的中断(因为存在中断复用问题),如果是,就直接调用dpc,然后isr返回。由dpc负责完成剩余的中断处理工作。这样isr能够尽快返回,中断响应能进行的更快速。至于overlapped,就是在readfile,writefile的时候,传入一个event。在硬件出来完成后,会触发这个event。上层设备就可以直接处理返回结果了。这个其实和回调差不多。你完全可以认为回调就是封装了overlapped这部分操作。
      

  3.   

    我说的硬件不是计算机的硬件,而是一些外部的设备,使用串口来通讯的。这些硬件不支持中断,但支持多线程的并行处理。我想问怎么去设计代码,使得返回结果能够在某个地方被统一的处理,因为异步的返回结果是在硬件操作完成后再返回的。WINDOWS的机制我这里用不上,只能自己去设计一种异步的机制,这种异步机制需要提高速度,架构也需要很容易被理解,以便其他程序员在这种架构上做开发。可能我说得不够清楚,请再赐教,谢谢!