sigaction (Как вызвать свой обработчик сигнала в каждом компоненте)

Модератор: Модераторы разделов

vladimir_l
Сообщения: 24

sigaction

Сообщение vladimir_l »

Программа загружает несколько библиотек. В каждой библиотеке организована работа со своим СОМ портом. С помощью sigaction в каждой библиотеке установлен свой обработчик сигнала SIGIO. Но срабатывает почему-то только тот который был подключен последним. Как вызвать обработчики сигнала в каждой библиотеке?
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: sigaction

Сообщение RasenHerz »

vladimir_l писал(а):
29.06.2009 18:16
Программа загружает несколько библиотек. В каждой библиотеке организована работа со своим СОМ портом. С помощью sigaction в каждой библиотеке установлен свой обработчик сигнала SIGIO. Но срабатывает почему-то только тот который был подключен последним. Как вызвать обработчики сигнала в каждой библиотеке?

думаю ответ - "никак". один процесс - один обработчик сигнала. ищите альтернативные пути.
Спасибо сказали:
vladimir_l
Сообщения: 24

Re: sigaction

Сообщение vladimir_l »

RasenHerz писал(а):
29.06.2009 19:14
vladimir_l писал(а):
29.06.2009 18:16
Программа загружает несколько библиотек. В каждой библиотеке организована работа со своим СОМ портом. С помощью sigaction в каждой библиотеке установлен свой обработчик сигнала SIGIO. Но срабатывает почему-то только тот который был подключен последним. Как вызвать обработчики сигнала в каждой библиотеке?

думаю ответ - "никак". один процесс - один обработчик сигнала. ищите альтернативные пути.


Я так и понял. Пробовал в каждой библиотеке пускать QThread и в нем опрашивать порт, но почему-то когда в основном модуле программы использую QProcess, то вся программа виснет. Без QThread QProcess запускается нормально. Используется Qt3. Может кто пдскажет альтернативу чтения с портов?
Спасибо сказали:
Аватара пользователя
GMar
Сообщения: 237
Статус: Будущий математик
ОС: Kubuntu,Ubuntu(UNR) 10.04

Re: sigaction

Сообщение GMar »

SIGIO - это сигнал или событие? вы чувствуете разницу между понятиями? сигнал можно к целой куче слотов законектить, с событиями все иначе.

Судя по всему речь идет о событии. У него может параметры какие есть?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: sigaction

Сообщение Portnov »

GMar
Ээ.. Боюсь, речь не о тех сигналах, про которые вы подумали :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: sigaction

Сообщение Женя Подсыпальников »

vladimir_l писал(а):
29.06.2009 18:16
Как вызвать обработчики сигнала в каждой библиотеке?


Может, оповестить явно, из единственного обработчика,
перебирая все функции-реакции коммуникаторов,

основываясь на конфигурацию (карту коммуникаторов) программы ? :)

Ведь для установки-чтения-сбрасывания некоторого байта ли бита в нём -
даже не нужно синхронизации потоков... :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: sigaction

Сообщение RasenHerz »

попробуйте работать не в потоках, а в разных процессах (юзайте fork()) - пусть все опрашивающие порты процессы ставят обработчики сигналов и общаются с родительским процессом, к примеру, по локальному сокету.

UPD.
вот один из моих постов, где я столкнулся с этой проблемой.
Спасибо сказали: