Re[2]: threads intercommunnication - как сделать?
От: sjukov Украина  
Дата: 21.11.06 18:57
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, sjukov, Вы писали:


S>>Коллеги! посоветуйте пожалуйста как лучше всего сделать связь между

S>>несколькими потоками одного процесса? я знаю что есть
S>>1. именованные каналы

К>можно и безымянные. В пределах одного процесса-то...


S>>2. мэйл слоты

S>>3. message (wm_copydata)
S>>и т.д..
S>>но как-то это все никузяво....

S>>Мне надо по сути уведомлять один из потоков о сыбытиях в других потоках и в ответ на это событие

S>>отсылать команды обратно — "указания" что нужно делать дальше.

К>А какого рода указания?

Рабочий поток постоянно читает что-то с com-порта(at команды gsm модема — на факт наличия входщих непрочитанных СМС). При считывания валидной строки с порта ,поток отсылает уведомление в главный поток приложения... приложение должно передать прочитанную
иформацию в другой поток , который запишет принятое СМС В БД (ms sql) Если все прошло без ошибок, то передается управление опять "читальщику"
с ком порта, где уже посылается at команда на удаление принятого СМС. чтобы не засорять память.

По идее лучше это сделать в виде "разделямых данных". т.к. важно чтобы смс удалялось только в том случае когда
запись окажется в БД(система дистанционного управления городского освещения(когда из автоматического режима нужно перейти в ручной для
управления с главного ПК)) — инофрмация важная

,.. хотя возможно я не совсем выкупил фишку с очередями

К>Насколько асинхронно всё это происходит, могут ли возникать очереди сообщений (кстати, о message queue!) или достаточно рандеву вокруг разделяемых данных?

К>Распиши сценарии, а потом под это дело придумаем решение.

По идее обработка следующего смс не наступит ранее как будет обработано предыдущее — записано в БД и стерто с
SIM карты.


Возможно я не совсем верно продумал "архитектуру", если это так можно назвать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.