阅读:1218回复:1
OVERLAPPED变量能用多次吗???
我用OVERLAPPED变量使得我的线程能与VxD程序进行异步数据交换,第一个线程工作的很好,可是第二个线程一运行就死机。我的程序如下:
1。页锁定部分 case DIOC_EVENTTHREAD: if (!pDIOCParams->dioc_ovrlp) break; TemOverLap= (PCHAR)LinPageLock( PAGENUM(pDIOCParams->dioc_ovrlp), _NPAGES_(pDIOCParams->dioc_ovrlp, sizeof(OVERLAPPED)), PAGEMAPGLOBAL); EOverLap=(OVERLAPPED *) (TemOverLap+((ULONG)pDIOCParams->dioc_ovrlp & 0xfff)); break; 2。通知应用程序,并释放页锁定部分 VWIN32_DIOCCompletionRoutine(EOverLap->O_Internal); LinPageUnLock(PAGENUM(EOverLap),_NPAGES_(EOverLap, sizeof(OVERLAPPED)),PAGEMAPGLOBAL); 3。应用程序部分 DeviceIoControl(hPort,DIOC_EVENTTHREAD,NULL,0,NULL,0,NULL,&EOverLap); GetOverlappedResult(hPort,&EOverLap,&Event,TRUE); 4。宏定义 #define PAGENUM(p) (((ULONG(p))>>12) #define _NPAGES_(p,k) ((PAGENUM((char*)p+(k-1))-PAGENUM(p))+1) 请问各位高手,我这样做有什么错误吗?谢谢了! [编辑 - 12/25/01 作者: w00d] |
|
沙发#
发布于:2001-12-28 10:17
大致看起来没有什么错误,和vtoolsd的sample一样。但有一点要提醒你:最好在每个线程里面“各自“打开/关闭vxd,否则会翘掉。
|
|
|