如果线程本身退出,则从一个从线程调用的方法强制返回

时间:2015-07-20 12:47:42

标签: c++ linux corba tao

我每隔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的限制吗?或者我必须做些什么才能让它发挥作用。 如果有办法在这里解决,请帮帮我。

由于

1 个答案:

答案 0 :(得分:0)

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