gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:00 25 4
gpt4 key购买 nike

我使用一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com