реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Мультиплексирование сигналов, OS::TEventFlag
Vasya777
сообщение Jan 12 2013, 17:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Здравствуйте!

Насколько понимаю для оповещения процессов о событии используется OS::TEventFlag. А как заставить процесс ожидать событие от какого-либо одного из нескольких источников.

Допустим есть несколько прерываний, которые обрабатывает один процесс. Не делать ведь несколько одинаковых процессов или несколько процессов, ждущих прерывания и посылающих сигнал обрабатывающему процессу. Есть ли какой-нибудь способ решения этой задачи?

Заранее большое спасибо за ответ!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 12 2013, 18:24
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Посмотрите пример 2-Message, это как раз то, что вам нужно. Один процесс получает сообщения от другого процесса и из прерывания.
Ну или можно использовать OS::channel, как в примере 3-Channel.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Vasya777
сообщение Jan 13 2013, 06:37
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Спасибо за ответ, всё оказалось проще, а я уж думал надо свой сервис писать.
А почему в message не сделали

CODE

bool wait (T& msg, timeout_t timeout = 0);
INLINE void send(T& msg);
INLINE void send_isr(T& msg);


Сообщение отредактировал Vasya777 - Jan 13 2013, 06:41
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 14 2013, 03:58
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (Vasya777 @ Jan 13 2013, 00:54) *
Насколько понимаю для оповещения процессов о событии используется OS::TEventFlag. А как заставить процесс ожидать событие от какого-либо одного из нескольких источников.

Допустим есть несколько прерываний, которые обрабатывает один процесс. Не делать ведь несколько одинаковых процессов или несколько процессов, ждущих прерывания и посылающих сигнал обрабатывающему процессу. Есть ли какой-нибудь способ решения этой задачи?

Один и тот же флаг события может сигналить множество источников. Поэтому, если не требуется определять источник, то просто ждёте флага в ожидающем процессе, и сигналите его их каких угодно мест. Если нужно определять источник, то, как уже сказали выше, OS::message.

QUOTE (Vasya777 @ Jan 13 2013, 13:37) *
А почему в message не сделали

CODE

bool wait (T& msg, timeout_t timeout = 0);
INLINE void send(T& msg);
INLINE void send_isr(T& msg);

Это вопрос или что? Если вопрос, то он не понятен.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Vasya777
сообщение Jan 15 2013, 14:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Цитата(dxp @ Jan 14 2013, 09:58) *
Это вопрос или что? Если вопрос, то он не понятен.


Вопрос. Просто при отправке и приёме сообщения было бы удобно сразу передать/получить его через аргумент функции. Были ведь, наверное, какие-то причины, по которым вместо этого был определён оператор "=".
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 16 2013, 08:51
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (Vasya777 @ Jan 15 2013, 21:45) *
Вопрос. Просто при отправке и приёме сообщения было бы удобно сразу передать/получить его через аргумент функции. Были ведь, наверное, какие-то причины, по которым вместо этого был определён оператор "=".

Это сделано из соображений эффективности. Код сервиса сообщений разделён на две части - класс TBaseMessage и шаблон message, в класс вынесен общий код, а в шаблон только та часть, которая зависит от типа сообщений - параметра шаблона. Функции wait(), send(), send_isr() находятся в общей части. Они выполняют общие действия для любых типов сообщений и не зависят от этих типов. Если сделать, как предложили вы, то тогда будет дублирование кода для разных сообщений.

Ваша хотелка понятна - не делать два действия, а сразу в одной функции и загрузка тела сообщения и посылка. Ничего не мешает в таком случае отнаследоваться от OS::message и добавить туда желаемое.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Vasya777
сообщение Jan 16 2013, 15:29
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Цитата(dxp @ Jan 16 2013, 14:51) *
Ваша хотелка понятна - не делать два действия, а сразу в одной функции и загрузка тела сообщения и посылка. Ничего не мешает в таком случае отнаследоваться от OS::message и добавить туда желаемое.


Да надо наследовать, и можно даже существующие функции перегрузить.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016