Vasya777 0 12 января, 2013 Опубликовано 12 января, 2013 · Жалоба Здравствуйте! Насколько понимаю для оповещения процессов о событии используется OS::TEventFlag. А как заставить процесс ожидать событие от какого-либо одного из нескольких источников. Допустим есть несколько прерываний, которые обрабатывает один процесс. Не делать ведь несколько одинаковых процессов или несколько процессов, ждущих прерывания и посылающих сигнал обрабатывающему процессу. Есть ли какой-нибудь способ решения этой задачи? Заранее большое спасибо за ответ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 12 января, 2013 Опубликовано 12 января, 2013 · Жалоба Посмотрите пример 2-Message, это как раз то, что вам нужно. Один процесс получает сообщения от другого процесса и из прерывания. Ну или можно использовать OS::channel, как в примере 3-Channel. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasya777 0 13 января, 2013 Опубликовано 13 января, 2013 (изменено) · Жалоба Спасибо за ответ, всё оказалось проще, а я уж думал надо свой сервис писать. А почему в message не сделали bool wait (T& msg, timeout_t timeout = 0); INLINE void send(T& msg); INLINE void send_isr(T& msg); Изменено 13 января, 2013 пользователем Vasya777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 14 января, 2013 Опубликовано 14 января, 2013 · Жалоба Насколько понимаю для оповещения процессов о событии используется OS::TEventFlag. А как заставить процесс ожидать событие от какого-либо одного из нескольких источников. Допустим есть несколько прерываний, которые обрабатывает один процесс. Не делать ведь несколько одинаковых процессов или несколько процессов, ждущих прерывания и посылающих сигнал обрабатывающему процессу. Есть ли какой-нибудь способ решения этой задачи? Один и тот же флаг события может сигналить множество источников. Поэтому, если не требуется определять источник, то просто ждёте флага в ожидающем процессе, и сигналите его их каких угодно мест. Если нужно определять источник, то, как уже сказали выше, OS::message. А почему в message не сделали bool wait (T& msg, timeout_t timeout = 0); INLINE void send(T& msg); INLINE void send_isr(T& msg); Это вопрос или что? Если вопрос, то он не понятен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasya777 0 15 января, 2013 Опубликовано 15 января, 2013 · Жалоба Это вопрос или что? Если вопрос, то он не понятен. Вопрос. Просто при отправке и приёме сообщения было бы удобно сразу передать/получить его через аргумент функции. Были ведь, наверное, какие-то причины, по которым вместо этого был определён оператор "=". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 16 января, 2013 Опубликовано 16 января, 2013 · Жалоба Вопрос. Просто при отправке и приёме сообщения было бы удобно сразу передать/получить его через аргумент функции. Были ведь, наверное, какие-то причины, по которым вместо этого был определён оператор "=". Это сделано из соображений эффективности. Код сервиса сообщений разделён на две части - класс TBaseMessage и шаблон message, в класс вынесен общий код, а в шаблон только та часть, которая зависит от типа сообщений - параметра шаблона. Функции wait(), send(), send_isr() находятся в общей части. Они выполняют общие действия для любых типов сообщений и не зависят от этих типов. Если сделать, как предложили вы, то тогда будет дублирование кода для разных сообщений. Ваша хотелка понятна - не делать два действия, а сразу в одной функции и загрузка тела сообщения и посылка. Ничего не мешает в таком случае отнаследоваться от OS::message и добавить туда желаемое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasya777 0 16 января, 2013 Опубликовано 16 января, 2013 · Жалоба Ваша хотелка понятна - не делать два действия, а сразу в одной функции и загрузка тела сообщения и посылка. Ничего не мешает в таком случае отнаследоваться от OS::message и добавить туда желаемое. Да надо наследовать, и можно даже существующие функции перегрузить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться