![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
текх для которых этот коннект и просходит. Экземпляра класса, методом которого является Connect, как устроен сам Connect я незнаю. Но почти 100% что он просто сохраняет указатели на какието данне из этого икземпляра, запускает свой поток, регистрирует коллбек который будет вызываться, и возвращает управление. После чего я ответственнен за то что ты дождать когда этот коннект (запущенный призрачный поток) так или иначе закончит свою работу, иначе его указатели станут недействительными Я немогу отрегистрировать коллбек, так работает библиотека. PS. хотя нет, могу. Но не уверен что это спасет. PPS. черт побери ![]() ![]() Это сообщение отредактировал(а) cupper - 3.3.2011, 14:08 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а у этого загадочного класса, нет метода типа cancel() ?
Добавлено через 1 минуту и 53 секунды вряд ли библиотека из секретных разработок пентагона, так что смысл утаивания ее названия(или хотябы названия некоторых из ее классов) - непонятен ![]() |
|||
|
||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
нет, у него есть disconnect - разовать соединение, есть registerApplication для того что бы зарегистрировать экземпляр коллебки которого вызываются, и есть release который удаляет сам объект. Вот за тем что бы registerApplication был действительный указатель я должен следать сам. Неуследил :( |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |