Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [boost::thread] interrupt 
:(
    Опции темы
cupper
Дата 3.3.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Немогу поймать исключение thread_interrupted что бы заставить поток незакрываться при вызове для него interrupt.

Немного о ситауции:

Есть некая библиотека сетевого взаимодействия. Я нее имеет метод connect для установление соединения. Его собенность в том что при его вызова управление возвращается сразу, а сам коннект происходит гдето в тени. О том что коонект установлени или нет я узнаю из некоего каллбека который вызывается при изменении состоянии соединения.
 Поэтому для того чтобы симитировать ConnectSync я после вызова conenct жду на condition_variable.wait(), и соотвественно когда вызывается колл бек, он делает  condition_variable.post() оживляя ожидания, и я могу продолжить работу с соединением. (библиотека реализова не через боост)

В своем приложении я создаю поток, внутри этого потока я вызывают этот самый ConnectSync, работа потока продолжается только после того как соединения будет либо установленно либо отвергнуты все попытки. 

Из главного потока я могу в любой момент прервать выше описанный поток. Так вот, если я это делаю в тот момент когда я вишу в методе ConnectSync на condition_variable.wait(), то работа моего потока прекращается, а вот работа Connect из библиотеки продолжается, и это приводит к ошибкам, так как переменных уже нет.

Мне нужно задержать закрытие потока вплоть до тех пор пока не закончит работу ConnectSync.
boost::this_thread::disable_interruption di не работает, так как библиотека сделана не на бусте.
Посмать исключение thread_interrupted тоже неполучается. Пробывал ловить его непосредственно на 
condition_variable.wait() там не ловится. А где ж мне его еще ловить ?


PS. то что я возмоно не привильно написал название прерывания, не должно играть роли так как я ловлю там все исключения ...

Это сообщение отредактировал(а) cupper - 3.3.2011, 13:46
PM MAIL   Вверх
mes
Дата 3.3.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  3.3.2011,  12:37 Найти цитируемый пост)
 а вот работа Connect из библиотеки продолжается, и это приводит к ошибкам, так как переменных уже нет.

о каких переменных речь? о колбяке ? так отключите его перед удалением потока..
остальные переменные при его сбросе будут не задействованны.. 



--------------------
PM MAIL WWW   Вверх
cupper
Дата 3.3.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(mes @ 3.3.2011,  13:45)
Цитата(cupper @  3.3.2011,  12:37 Найти цитируемый пост)
 а вот работа Connect из библиотеки продолжается, и это приводит к ошибкам, так как переменных уже нет.

о каких переменных речь? о колбяке ? так отключите его перед удалением потока..
остальные переменные при его сбросе будут не задействованны..

текх для которых этот коннект и просходит. Экземпляра класса, методом которого является Connect, как устроен сам Connect я незнаю. Но почти 100% что он просто сохраняет указатели на какието данне из этого икземпляра, запускает свой поток, регистрирует коллбек который будет вызываться, и возвращает управление. После чего я ответственнен за то что ты дождать когда этот коннект (запущенный призрачный поток) так или иначе закончит свою работу, иначе его указатели станут недействительными

Я немогу отрегистрировать коллбек, так работает библиотека.

PS. хотя нет, могу. Но не уверен что это спасет. 

PPS. черт побери smile это и было ошибкой. В нутри библиотеки указатель на экземпляр коллебк которого вызывается, есть именно указатель, а не умный указателем. Поэтому я должен сам следать за ним. smile

Это сообщение отредактировал(а) cupper - 3.3.2011, 14:08
PM MAIL   Вверх
boostcoder
Дата 3.3.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а у этого загадочного класса, нет метода  типа cancel() ?

Добавлено через 1 минуту и 53 секунды
Цитата(cupper @  3.3.2011,  13:37 Найти цитируемый пост)
Есть некая библиотека сетевого взаимодействия

вряд ли библиотека из секретных разработок пентагона, так что смысл утаивания ее названия(или хотябы названия некоторых из ее классов) - непонятен smile 
PM WWW   Вверх
cupper
Дата 3.3.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(boostcoder @ 3.3.2011,  14:06)
а у этого загадочного класса, нет метода  типа cancel() ?

Добавлено @ 14:08
Цитата(cupper @  3.3.2011,  13:37 Найти цитируемый пост)
Есть некая библиотека сетевого взаимодействия

вряд ли библиотека из секретных разработок пентагона, так что смысл утаивания ее названия(или хотябы названия некоторых из ее классов) - непонятен smile

нет, у него есть disconnect - разовать соединение, есть registerApplication для того что бы зарегистрировать экземпляр коллебки которого вызываются, и есть release который удаляет сам объект. Вот за тем что бы registerApplication был действительный указатель я должен следать сам. Неуследил :(
PM MAIL   Вверх
mes
Дата 3.3.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(cupper @  3.3.2011,  13:11 Найти цитируемый пост)
 я должен следать сам.

а ларчик просто открывался © smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.