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

标签 c++ linux corba tao

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

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

我的代码是这样的

//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
  }
}

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

谢谢

最佳答案

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

关于c++ - 如果线程本身退出,则从从线程调用的方法强制返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516940/

相关文章:

cross-platform - 我应该使用 CORBA、MessagePack RPC 或 Thrift,还是其他的东西?

c++ - Logitech Quickcam Pro 9000 Bayer 使用 openCV 进行捕捉

c++ - 将一个 vector 元素和第二个 vector 复制到第三个 vector 中,并避免重复

linux - 如何从多个文件中提取一列,并将这些列粘贴到一个文件中?

linux - 操作系统上的全系统快照

java - CORBA:服务器作为客户端

c++ - 字符串流相关问题

素数搜索中的 C++ 数组

c++ - 我真的需要 Visual Studio 吗

linux - *nix 方法在 ',' 之后乘以行