阅读:1832回复:13
在WDM驱动和应用程序之间交换大量数据有什么好方法?
能不能用socket?
:P |
|
沙发#
发布于:2002-12-02 16:20
最好驱动程序读数据并存取,并给应用程序一指针
应用程序利用指针,及时处理数据。 |
|
板凳#
发布于:2002-12-02 16:25
据说有共享内存方法可用。
|
|
地板#
发布于:2002-12-02 16:34
驱动接收到数据如何通知应用程序?
|
|
地下室#
发布于:2002-12-02 16:50
驱动接收到数据如何通知应用程序? 共享内存最方便,设一标志位不断查询 |
|
5楼#
发布于:2002-12-02 17:05
用事件通知可以有很高的效率
|
|
|
6楼#
发布于:2002-12-02 17:11
[quote]驱动接收到数据如何通知应用程序? 共享内存最方便,设一标志位不断查询 [/quote] 不断查询会不会造成cpu占用100%的后果? :o |
|
7楼#
发布于:2002-12-02 17:15
我是用deviceiocontrol()完成的。
|
|
8楼#
发布于:2002-12-02 17:18
[quote][quote]驱动接收到数据如何通知应用程序? 共享内存最方便,设一标志位不断查询 [/quote] 不断查询会不会造成cpu占用100%的后果? :o [/quote] 用多线程 |
|
9楼#
发布于:2002-12-02 17:22
我是用deviceiocontrol()完成的。 这样能向应用发出通知吗?这样似乎只能向驱动发出通知。 |
|
10楼#
发布于:2002-12-02 17:32
应用事件通知吧.
|
|
|
11楼#
发布于:2002-12-02 18:19
我现在用了一种略微麻烦的方法,来模拟驱动程序向应用程序发消息。
是这样实现的: 在驱动程序中划出一个缓冲区,当驱动程序要给应用程序发消息的时候,先给这个缓冲区头两个字节设置为自己定义的消息代码,之后设置一下它和应用程序共享的事件。 而应用程序那一端,建立一个线程,专门等待这个事件,一旦等待到了事件以后,立即调用一个驱动提供的ioctrl来读取驱动的那个缓冲区,根据缓冲区的头两个字节来确定消息类型,再向主程序发消息或直接来处理这个消息。当然,如果缓冲区定义的足够大的话,这个消息还可以附带很多的数据呢。 有一点需要注意:如果你的驱动允许多个客户同时访问的话,事件应该在驱动里建立,然后客户程序通过名字访问这个事件。如果你采用的是客户程序建立事件再传下去给驱动的话,应该在驱动里建立一个保存每个客户事件的链表。当要发消息时,给每个事件都设置一下信号。 |
|
|
12楼#
发布于:2002-12-02 18:19
我就是用事件做的,但频率不能太高,1K左右
|
|
13楼#
发布于:2002-12-10 21:26
你的大数据量是多大?
直接用DMA方式就可以了,这是最简单直接的方法。 |
|