![](/img/trans.png)
[英]QApplication method setStyleSheet called from other thread causes segmentation fault
[英]forcefully return from a method that called from a thread if thread itself exited
我每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的限制吗? 或者我必须做点什么才能使其正常工作。 如果有任何解决方法,请帮助我。
谢谢
听起来您的强制退出线程没有完全退出。 干净退出的线程应将其所有上下文销毁,并且不留任何残留物。 pthread可以是可连接的也可以是分离的,您使用哪种类型的线程创建? 强制退出后,“客户”对象是否被销毁? 创建线程的逻辑又如何处理僵尸线程的异常? 回答所有这些问题,然后自己处理所有这些细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.