Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Межпотоковое взаимодействие: есть поток, который при


Страницы:   1 2

AlexEgorov ©   (2007-04-24 09:41:00) 

поступленнии данных создаёт другой поток для их обработки и продолжает ждать новые данные. Как из второго потока вернуть обработанные данные в первый поток в сервисе? Если работа идёт в приложении, то Sinchronyze - и никаких проблем, а в сервисе это не прокатывает, наверное из-за того, что нет главной формы, в контексе которой работает код в Sinchronyze. Что можно сделать в сервисе?


AlexEgorov   (2007-04-24 10:17:00) [21]

> Это как ?

Начинает сильно тормозить - рассматривается ситуация, когда принтеров в системе более 50-ти и задания печати поступают довольно часто


Сергей М.   (2007-04-24 10:15:00) [22]


> спулер входит в ступор


Это как ?


AlexEgorov   (2007-04-24 10:13:00) [23]

А в каком из потоков? Мне же как-раз множественное чтение для нескольких обрабатывающих потоков ненужно, т.к. спулер вешается.


MBo   (2007-04-24 10:11:00) [24]

может, воспользоваться TMultiReadExclusiveWriteSynchronizer?


AlexEgorov   (2007-04-24 10:08:00) [25]

Я хотел сначала на каждый станспортный делать обрабатывающий, но в этом случае спулер входит в ступор :( - я мониторю входящие задания печати, и транспортные потоки, это потоки мониторинга принтеров. А обрабатывающий поток выдёргивает и парсит эти задания.


Сергей М.   (2007-04-24 10:04:00) [26]


> AlexEgorov   (24.04.07 09:58) [3]


Я так понял, что у тебя один обрабатывающий поток на несколько транспортных ?

Странная, однако, затея - "семеро с ложкой, один с сошкой")


Reindeer Moss Eater   (2007-04-24 10:02:00) [27]

так вот похоже в какой-то момент эта сейция не освобождается и всё останавливается, т.к. все новые потоки обработки данных ждут освобождения секции, которая залочена :(

Наверное у тебя есть ошибка в программе


AlexEgorov   (2007-04-24 09:58:00) [28]

Сейчас у меня сделано так - после обработки данных второй поток перебирает список потоков поступающих данных (на самом деле их несколько), и устанавливает в нём Event, предварительно положив обработанные данные в некий буфер, как и предложил MBo.

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


Сергей М.   (2007-04-24 09:49:00) [29]

Mожно также воспользоваться PostThreadMessage, если взаимодействие с раб.столом по каким-то причинам нежелательно. Иначе - SendMessage


MBo   (2007-04-24 09:46:00) [30]

второй поток кладет данные в некий буфер и выставляет объект синхронизации, например, Event, а первый поток, дождавшись срабатывания, забирает данные


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо