阅读:2489回复:10
ZwReadFile and ZwWriteFile调用冲突
使用ZwCreateFile打开串行口,再开两个系统线程,一个调ZwReadFile,一个调ZwWriteFile.问题是一个线程调用的函数不返回,除非another线程结束.How to Solve this problem?
|
|
沙发#
发布于:2002-10-28 18:06
是不是ZwCreateFile的参数的不对?
|
|
|
板凳#
发布于:2002-10-29 08:14
参数如下
status = ZwCreateFile(&m_pRealPort, FILE_READ_DATA|FILE_WRITE_DATA,//SYNCHRONIZE| &objectAttributes, &IoStatus, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); 请Tom老大帮我瞧瞧,多谢!!! |
|
地板#
发布于:2002-10-29 08:29
FILE_SYNCHRONOUS_IO_NONALERT?
有问题吧 |
|
地下室#
发布于:2002-10-29 09:11
照yymrhxf说的,把FILE_SYNCHRONOUS_IO_NONALERT参数选项去掉试试
|
|
|
5楼#
发布于:2002-10-30 16:16
把FILE_SYNCHRONOUS_IO_NONALERT参数选项去掉后,status=ZwReadFile(m_pComPort,NULL,NULL,NULL,&IoStatus,Buf,256,NULL,NULL)函数会返回参数不正确.哪位老大再点拨一下,答对每人20分.
|
|
6楼#
发布于:2002-10-30 22:50
你用ZwCreateFile打开的时候用异步方式,在ZwReadFile和ZwWriteFile的时候有几个异步的参数不能为NULL,这样或许会好些。
|
|
7楼#
发布于:2002-10-31 09:31
status = ZwCreateFile( &ntFileHandle, //output file handle
SYNCHRONIZE|FILE_ANY_ACCESS, &ObjectAttributes, &IoStatus, //output status of result NULL, //pallocate size 0, //file attributes FILE_SHARE_READ|FILE_SHARE_WRITE, //share access FILE_OPEN, //create disposition FILE_SYNCHRONOUS_IO_NONALERT|FILE_DIRECTORY_FILE, //create options NULL, //EA buffer 0 ); |
|
|
8楼#
发布于:2002-10-31 09:36
POBJECT_ATTRIBUTES objectAttributes;
IO_STATUS_BLOCK IoStatus; InitializeObjectAttributes(... ) ; HANDLE ntFileHandle; ZwCreateFile( &ntFileHandle, SYNCHRONIZE | FILE_ANY_ACCESS, &objectAttributes, &IoStatus,, NULL, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE,NULL,0 ); 试试 |
|
|
9楼#
发布于:2005-02-01 14:23
应该可以
|
|
|
10楼#
发布于:2005-02-01 17:45
记得在CHRIS CANT的书上看到,对ZWWRITEFILE的调用和ZWCREATEFILE必须在相同的线程环境中,根据你的描述,你开了二个线程,但用一个CREATEFILE创建二个COM口,是不是这个原因。试一试分别在这二个线程中CREATE然后READ、WRITE。
|
|
|