OSX-主线程正在等待如何获得中断管道响应

时间:2014-02-27 13:36:40

标签: multithreading macos network-programming kernel kernel-extension

我正在开发mac上的设备驱动程序。我的问题是我们如何使设备请求异步同步。就像我向设备发送一个send encapsulated命令,并在获得中断管道通知后使用get encapsulated命令获取响应。所以我怎么能让我的线程等到所有上述请求都没有完成(发送和获取)。但是来自get encap的函数被称为虚函数并由上层调用。因此,如果我在该虚拟功能中处理等待,那么直到我的等待过程中我才能得到响应。 请帮我解决这个问题。

事先知道了。

1 个答案:

答案 0 :(得分:0)

**

bool class::USBSetPacketFilter() 
{ 
IOReturn Value
.... ................. 
value = send_Encasulated_command(* of structure, length);
 IOLocksleepdeadline(x, y, z, w);
 global variable which is updated when get_Encap is completed. 
if (Value == IOSuccess &&XVZ == true) 
return true;
 else return false 
}

** 在其他函数中读取中断管道

pipe->Read(mMemDes,&**m_CommInfo**,NULL);

在m_CommInfo回调函数中我们检查它是否是设备响应然后我们调用get_encapsulated函数来完成请求而IOLockwakeup(x,y,z)撤销线程

但是当上层调用USBSetPacketFilter()时。我的代码卡在IOLocksleepdeadline上,直到超时完成。所以线程没有去读取interputpipe。