阅读:1360回复:9
多线程的应用程序不能和驱动通信了,怎么办?
大家好:
我今天可是苦了整整一天了,驱动做完后在单线程中能正常使用,但改成多线程就不再能正常使用了。代码如下(简化) void Test() { HANDLE hwnd = CreateFile( ... ); //(1) BOOL bRet = WriteFile(hwnd,...); //(2) bRet = DeviceIoControl(hwnd,...); //(3) } 在单线程(主线程)中调用Test()函数时,以上(1)~(3)语句都能正常执行,驱动程序也做了预期的事情。 当我改成多线程后,在工作者线程中调用Test()函数时,问题出来了,第(1)句执行正常,设备打开成功;第(2)句执行失败,返回bRet = FALSE,驱动程序也没有收到WriteFile()时的Irp;有意思的是第(3)句居然执行正常,所有第(3)句中的操作都能进行。 在任何情况下,只要将Test()函数放到主线程中调用就一切正常了,请问这是怎么回事,请大侠帮我诊断诊断,我快急死了,今天搞了一整天都不能找到解决办法。 先谢谢你! |
|
|
沙发#
发布于:2002-07-25 10:15
如果WriteFile不能用的话,那就不用好了,我反正把应用程序对驱动程序的通信都写在DeviceIoControl里,没出什么问题。
|
|
板凳#
发布于:2002-07-25 13:59
WriteFile可能要用Overlap,DeviceIo没问题,
|
|
地板#
发布于:2003-05-20 23:15
建一个总线程,在把读写建立一个线程,之后在总线程内调用,不知可行否?对不起啊,我是个菜鸟!
|
|
地下室#
发布于:2003-05-21 16:51
为什么??
顶一下 :D |
|
|
5楼#
发布于:2003-05-21 21:56
GetLastError看看是什么错误呀。
hwnd不正确?或是有个参数是局部变量,用writefile的时候这个参数已经不在了? |
|
6楼#
发布于:2003-05-22 00:20
GetLastError看看是什么错误呀。 有道理,楼主把writefile的参数写出来看看 |
|
|
7楼#
发布于:2003-06-13 12:39
可能你的驱动程序里采用独占式方式,所以你在createfile返回失败
|
|
|
8楼#
发布于:2003-06-14 20:31
可能你的驱动程序里采用独占式方式,所以你在createfile返回失败 楼主的意思是说WRITEFILE不能用,GREATFILE能用,不知道楼主现在解决问题没?如果解决了,请告诉一下! |
|
|
9楼#
发布于:2003-06-15 10:56
估计和驱动没有关系。
你看一下是不是连接错了C语言的运行库 |
|