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