остановка приложения с потоками (linux консоль)

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Re: остановка приложения с потоками (linux консоль)

Сообщение Vadim » 24.03.2019 07:01:17

Attid писал(а):принимает какая команда ?

Предыдущие ораторы уже дажли хорошие примеры. ;-)
Если коротко:
1. Вначале нужно создать процедуру, которая обрабатывает уже принятые сигналы. Там всего один параметр - номер сигнала. Номер должен быть больше существующих системных, если речь идёт о каких-то внутренних разборках внутри самой программы.
2. В самом начале программы нужно зарегистрировать эту процедуру с помощью функции:
Код: Выделить всё
SigActionHandler(@ПроцедураОбработки)

3. Приём сигнала или, точнее говоря, изменение поведения программы на полученый сигнал, делается функцией:
fpSigAction(КонкретныйСигнал, СтруктураГдеЗарегистрированаПроцедураОбработчика, МожноУказатьNIL);
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: остановка приложения с потоками (linux консоль)

Сообщение xdsl » 10.04.2019 13:25:28

В своем проекте я решил проблему так:
1. В запущенном потоке разрешаю внешнее убиение нити: pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,nil);
2. Перед завершением программы убиваю нить через system.killThread

Такой подход не рекомендуется везде, прям как использование goto. Но работает во всех случаях.

Пример можно псомотреть в модуле rubiroParallel из библиотеки rubirobotlib (http://rubirobot.ru/files/src/RubiRobotLib.tar.gz).
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: остановка приложения с потоками (linux консоль)

Сообщение Attid » 12.04.2019 18:37:27

fpSigAction решил проблему с killall
теперь принимаю сигнал и корректно выхожу.

Всем спасибо !
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 20

Рейтинг@Mail.ru