принудительное возвращение из метода, вызвавшего поток, если сам поток вышел

Я использовал одну pthread для опроса сети каждые 2 секунды.
Для этого я вызываю один клиентский интерфейс из метода run () pthread.
Но что происходит, когда между сервером и клиентом не работает сеть, этот метод должен выдавать исключение, но сейчас этого не происходит. Поэтому я планирую принудительно вернуть этот метод и выйти из потока.

Чтобы добиться этого, я попытался принудительно выйти из потока, сигнализируя об этом.
Но проблема, с которой я все еще сталкиваюсь, заключается в том, что после выхода из самого потока клиентский интерфейс выдает исключение очень поздно. Это приводит к противоречивому поведению в моей реализации.

Мой код выглядит так

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

Решение

Похоже, что ваша нить с принудительным выходом не завершена чисто. Чисто завершенный поток должен иметь весь свой контекст уничтоженным и не оставлять следов. Pthread может быть присоединяемым или отдельным, какой тип создания потока вы используете? После вашего принудительного выхода уничтожается ли объект «Клиент»? Как насчет логики, которая создает поток, обрабатывает ли он исключение из потока зомби? Ответьте на все вопросы и задайте все вопросы.

0

Другие решения


По вопросам рекламы [email protected]