1

我每 2 秒使用一个 pthread 轮询网络。为此,我从 pthread 的 run() 方法调用一个客户端接口。但是当服务器和客户端之间的网络中断时会发生什么,这个方法应该抛出异常,但现在没有发生。所以我打算强制返回这个方法并退出线程。

为了实现这一点,我试图通过发出信号来强制退出线程。但我仍然面临的问题是,从线程本身退出后,客户端接口很晚才抛出异常。这导致我的实现行为不一致。

我的代码看起来像这样

//server side code
//This is Linux code

void ServerImp::run()
{
  try {
  while(1)
  {
    Client->PingNetwork()
  }
  }
  catch(...)
  {
    //Handle exception
  }

}

//PingNetwork implementation
//This is Windows code
void NetworkImpl::PingNetwork() throw exception
{
  try{
  while(IsValidClient())//This will return as soon as client disconnected from server
  {
     sleep(2);
  }
  }
  catch(...)
  {
     //Handle exception
  }
}

问这个问题的基本想法是,对我来说,我的底层交互 TAO 2.0a 没有立即检测到当前会话的网络故障,但在客户端它及时检测到它并启动另一个新会话进行连接。但一段时间后,新的和旧会话出现 CORBA::COMM_FAILURE 异常,因此导致服务器和客户端行为不稳定。这是TAO的限制吗?或者我必须做点什么才能让它发挥作用。如果有什么办法可以在这里解决,请帮助我。

谢谢

4

1 回答 1

0

听起来您的强制退出线程没有干净地退出。干净退出的线程应该销毁其所有上下文并且不留下任何残留物。pthread 可以是可连接的或可分离的,您使用哪种类型的线程创建?在您的强制退出发生后,您的“客户”对象是否被破坏?创建线程的逻辑呢,它是否处理僵尸线程的异常?自己回答所有这些问题并处理所有这些细节。

于 2015-07-21T13:22:39.773 回答