我在多线程系统中使用 ace register_handler 函数。每隔一段时间,register_handler 就会失败。我打印了文件描述符(通过调用 get_handle 函数),我注意到当文件描述符超过 1000 时,get_handle 失败。有谁知道为什么吗?
我不是 ACE 专家。但似乎 ACE_Event_Handler 类中的默认实现每次都会返回错误。从 ACE 源代码中提取:
ACE_HANDLE
ACE_Event_Handler::get_handle (void) const
{
ACE_TRACE ("ACE_Event_Handler::get_handle");
return ACE_INVALID_HANDLE;
}
派生类需要自己实现。因此,如果您的类派生自 ACE_Event_Handler 类,您必须覆盖 get_handle()
方法以获得有意义的结果:
ACE_HANDLE DerivedClass::get_handle(void) const
{
return peer().get_handle();
}
我会推荐给你
- 确认您在派生类中提供了该方法。
- 如果是这样,请仔细检查其实现情况。我们的问题就在这里。 (您能否向我们提供有关实现的更多详细信息?)
- 如果您没有提供任何覆盖,那么您知道您必须实现它。
我是一名优秀的程序员,十分优秀!