![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
![]()
Есть потребность, не критичная конечно, но все же.
Суть, при работе с большим количеством потоков процедура Synchronize( LOG) может выполняться достаточно долго, так как потоки обращаются к ней часто. Пока такого не было, но интересно. Возможно ли потоку просто послать данные\дать задание и не дожидаться выполнения, а дальше работать? Самом собой Synchronize() выполнит все в порядке очереди. ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
![]()
А процедура/функция LOG что делает? Записывает в файл? Если да, то могу предложить завести ещё один поток, который будет содержать TSringList(или что-то аналогичное). Каждые поток будет добавлять туда нужную инфу, а логирующий поток потихоньку записывать. Это будет работать быстрее. Естсетсвенно надо будет объявить этот список в критической зоне(или как она там называется).
Если вы не хотите чтобы потоки тратили время, ожидая доступа к критической секции, то могу предложить ещё вариант - в каждом потоке создать поле, в которое он будет заносить необходимую информацию, а логирующий поток будет потихоньку собирать и записывать всю эту информацию. P.S. Если у вас потоков не много, то оставьте всё как есть. Времени вы много не выйграете. |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
![]() Цитата:
Как не крути придется синхронизировать добавление, приходим к тому от чего ушли.)) ![]() |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Используйте крит. секции.
Я обычно делаю пул куда сообщения ставятся в очередь и по мере поступления идут в лог, а потоки ждут только установки сообщения в очередь, и не простаивают. Из очереди сообщения идут на вывод в зависимости от их важности. |
![]() |
![]() |
![]() |
#5 | |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
![]() Цитата:
Либо второй вариант. |
|
![]() |
![]() |
![]() |
#6 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Цитата:
потом (ВНЕ syncrone) медленно-медленно выгружаем буфер. БУФЕР должен уметь накапливать информацию (два и более быстрых добавлений) и избавляться от уже выгруженной Цитата:
Цитата:
Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 13.03.2013 в 17:13. |
||||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
![]()
Ок, спасибо за информацию парни
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает Synchronize | Maalik | Общие вопросы Delphi | 2 | 17.12.2012 17:41 |
Через Synchronize не работает get | bulldog5293 | C++ Builder | 3 | 14.06.2012 10:04 |
Synchronize() и события формы | RusikOk | Общие вопросы C/C++ | 0 | 24.07.2010 08:52 |
Synchronize в DLL | AnomaliA | Общие вопросы Delphi | 12 | 29.09.2009 13:08 |
Метод Synchronize класса TThread | EdNovice | Общие вопросы Delphi | 10 | 01.08.2009 14:47 |