Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 16:10   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию Не дожидаться выполнения Synchronize()

Есть потребность, не критичная конечно, но все же.
Суть, при работе с большим количеством потоков процедура Synchronize( LOG) может выполняться достаточно долго, так как потоки обращаются к ней часто. Пока такого не было, но интересно.
Возможно ли потоку просто послать данные\дать задание и не дожидаться выполнения, а дальше работать? Самом собой Synchronize() выполнит все в порядке очереди.
bakanaev вне форума Ответить с цитированием
Старый 13.03.2013, 16:25   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

А процедура/функция LOG что делает? Записывает в файл? Если да, то могу предложить завести ещё один поток, который будет содержать TSringList(или что-то аналогичное). Каждые поток будет добавлять туда нужную инфу, а логирующий поток потихоньку записывать. Это будет работать быстрее. Естсетсвенно надо будет объявить этот список в критической зоне(или как она там называется).

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

P.S. Если у вас потоков не много, то оставьте всё как есть. Времени вы много не выйграете.
Kix.IV вне форума Ответить с цитированием
Старый 13.03.2013, 16:57   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Каждые поток будет добавлять туда нужную инфу
Как примерно?)))
Как не крути придется синхронизировать добавление, приходим к тому от чего ушли.))
bakanaev вне форума Ответить с цитированием
Старый 13.03.2013, 17:06   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Используйте крит. секции.

Я обычно делаю пул куда сообщения ставятся в очередь и по мере поступления идут в лог, а потоки ждут только установки сообщения в очередь, и не простаивают.
Из очереди сообщения идут на вывод в зависимости от их важности.
Человек_Борща вне форума Ответить с цитированием
Старый 13.03.2013, 17:10   #5
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
Как примерно?)))
Как не крути придется синхронизировать добавление, приходим к тому от чего ушли.))
Я же написал, что нужно использовать крит.секции.
Либо второй вариант.
Kix.IV вне форума Ответить с цитированием
Старый 13.03.2013, 17:11   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Как не крути придется синхронизировать добавление, приходим к тому от чего ушли.))
syncrone -БЫСТРОЕ добавление в буфер (к примеру TStringList)
потом (ВНЕ syncrone) медленно-медленно выгружаем буфер.
БУФЕР должен уметь накапливать информацию (два и более быстрых добавлений) и избавляться от уже выгруженной

Цитата:
который будет содержать TSringList(или что-то аналогичное).
Цитата:
Каждые поток будет добавлять туда нужную инфу
(быстро-быстро)
Цитата:
, а логирующий поток потихоньку записывать
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.03.2013 в 17:13.
evg_m вне форума Ответить с цитированием
Старый 13.03.2013, 17:24   #7
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Ок, спасибо за информацию парни
bakanaev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает 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