|
Модераторы: xvr |
|
nullpoint |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Добрый вечер. Подскажите возможно ли передать в обработчик сигнала дополнительные параметры? У меня есть два приложения. Из первого посылаю сигнал SIGTERM второму:
Во втором приложении есть обработчик сигнала:
Собственно в чем проблема. Чтобы закрыть сессию мне нужно в качестве аргументов передать в функцию send_bye имена потоков, чтобы корректно их завершить, структура session объявлена глобально. Пробовал так:
Приложение завершается, но в первом приложении статус этого приложения остается ONLINE. При отладке в gdb приложении вываливается в segmentation fault на send_bye и затем нормально завершается. Каким образом можно передать thread_a, thread_b в обработчик сигнала terminate_app? Объявить глобально не предлагать. |
||||||
|
|||||||
konshyn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Можно, но не стандартными сигналами, а сигналами "реального времени". Погугли, легко ищется. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
||||
|
||||
nullpoint |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Конечно не означает. Это совершенно разные процессы, и первому совершенно не нужно знать о сессииях, потоках второго. Под "глобально" я имел в виду, глобально для второго приложения. Использовать сигналы реального времени как мне кажется тоже не получится. Первое приложение просто отправляет сигнал "закройся" второму и он не знает какие потоки у него запущены. Мне нужно именно во втором приложении (которое принимает сигнал) передать в обработчик сигнала имена потоков, которые нужно закрыть перед завершением приложения. |
|||
|
||||
konshyn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
а в чем проблема? из wiki
Определяешь структуру, в которой можешь хранить имена потоков (например список) и отправляешь через сигнал указатель на эту структуру. А в обработчике считываешь. И как это процесс не может знать, какие у него открыты потоки? Или я не совсем понял суть. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
nullpoint |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Сигнал отправляется из первого приложения, а закрывается второе приложение. Второе-то приложение конечно же знает какие у него потоки запущены, и в нем я могу в список записать их. Но как я могу из первого приложения передать указатель на этот список? Я пока еще не силен в программировании, но мне кажется это не возможно. Или я вас не понял? |
|||
|
||||
konshyn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
xvr |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
А зачем? Закрывать то потоки вы все равно будете во 2м приложении, вот в нем и составляйте списки.
Вызовите из обработчика функцию, которая вам вернет список потоков второго приложения, и закрывайте на здоровье |
||||
|
|||||
nullpoint |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Скорее всего я не понимаю этого механизма, но попробую объяснить как я это вижу. Итак, в первом приложении мы посылаемм сигнал с помощью:
здесь value - указатель на список потоков. Но сам список находится во втором приложении. И как же мы можем из первого приложения передать указатель на него вместе с сигналом? Первое приложение знать не знает в какой области памяти лежит этот список и что он вообще существует.
А можно пример такой функции? Вот есть у меня к примеру такой код:
Как должна выглядеть функция, вызванная в new_signal_handler и способная вернуть мне list_thread? Прошу объяснить так сказать популярно для дурака:) Это сообщение отредактировал(а) nullpoint - 30.1.2015, 19:44 |
||||||
|
|||||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
||||
|
||||
nullpoint |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
||||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Никакого. Это и есть цель. Я же не знаю, как у вас устроен список задач. Это может быть и глобал, может быть и что то приватное в модуле, может быть какой нибудь класс-синглетон. Через функцию можно получить список задач из любого из этих мест, поэтому я ее и упомянул. |
|||
|
||||
Ihost |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.9.2012 Репутация: нет Всего: нет |
Во-вторых для организации передачи сигналов в непосредственные потоки, можно воспользоваться следующей функциональностью http://stackoverflow.com/questions/4208929...o-pthreads-in-c |
|||
|
||||
nullpoint |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Ihost, мне не нужно было передавать сигнал в потоки, мне нужно было передать имена потоков в обработчик сигнала. Т.е. сигнал приходит в основной поток, вызывается обработчик сигнала, и вот из этого обработчика у меня вызывается функция, на вход которой подаются потоки, которые нужно закрыть. Созданные потоки не должны знать, что пришел какой-то сигнал, мы просто говорим им завершить работу без указания причины.
|
|||
|
||||
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |