首页
论坛
课程
招聘
[求助]异步deviceiocontrol错误
2009-4-16 21:40 6162

[求助]异步deviceiocontrol错误

2009-4-16 21:40
6162
HANDLE hFile = = CreateFile(this->m_linkname , GENERIC_READ ,
        0 , NULL , OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
OVERLAPPED ol = {0};
ol.hEvent = ::CreateEvent(NULL , FALSE , FALSE , NULL);
::DeviceIoControl(hFile , TESTDRIVER, 0 , NULL,
                buf , 4 , &dwRet , &ol);
//等待受信,貌似不能成功。。。
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT) 
{
    AfxMessageBox("等待中");
}


在WaitForSingleObject的时候不会弹出对话框,貌似线程阻塞住了,一直等到DeviceIoControl执行成功之后才会恢复。

请各位高手问下这个是什么原因?

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 115
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
supermilg 活跃值 2009-4-17 02:44
2
0
DWORD msgBoxThread( .....){
   AfxMessageBox("等待中");
}

HANDLE hFile = = CreateFile(this->m_linkname , GENERIC_READ ,
        0 , NULL , OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
OVERLAPPED ol = {0};
ol.hEvent = ::CreateEvent(NULL , FALSE , FALSE , NULL);
::DeviceIoControl(hFile , TESTDRIVER, 0 , NULL,
                buf , 4 , &dwRet , &ol);
               

CreateThread( msgBoxThread, ....);

               
               
//等待受信,貌似不能成功。。。
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
   
}

Send a message to close your "等待中" message box.
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-17 09:28
3
0
上面的是一种解决方法。

但是我的Msgbox是想提示我等待超时了,而不是提示当前是一直等待状态。

有其他办法么。。。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljlLionel 活跃值 2009-4-17 09:32
4
0
//等待受信,貌似不能成功。。。
if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
   
}
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-17 09:39
5
0
这条代码有问题?
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljlLionel 活跃值 2009-4-17 09:52
6
0
if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_OBJECT_0)
{
    //是成功
   //也就好似說,有ol.hEvent 相应时,执行到这里
}

if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
  //这样,则没有  ol.hEvent 相应,且超过300时,会走到这里
}
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-17 12:11
7
0
//等待受信,貌似不能成功。。。
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT) 
{
    AfxMessageBox("等待中");
}

这条代码就是说如果ol.hEvent未受信就一直弹出对话框。一直等到受信为止。
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-17 12:12
8
0
我的本意是如果300MS内等待超时的话,就弹出对话框一直提示。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljlLionel 活跃值 2009-4-17 12:45
9
0
while(::WaitForSingleObject(ol.hEvent , 0) == WAIT_TIMEOUT)
{
    //加上时间计算时间
   //如果大于 300时跳出循环
   //否则
    AfxMessageBox("等待中");
}
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-17 13:11
10
0
你这样跟我上面写的代码没什么区别吧。。。。

现在的问题貌似是WaitForSingleObject(ol.hEvent , 0)这个等待语句不起作用
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
godyhook 活跃值 2009-4-19 11:11
11
0
谁能帮忙解答一下啊。。。。。
游客
登录 | 注册 方可回帖
返回