|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.03.2013, 16:10 | #1 |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
Не дожидаться выполнения Synchronize()
Есть потребность, не критичная конечно, но все же.
Суть, при работе с большим количеством потоков процедура Synchronize( LOG) может выполняться достаточно долго, так как потоки обращаются к ней часто. Пока такого не было, но интересно. Возможно ли потоку просто послать данные\дать задание и не дожидаться выполнения, а дальше работать? Самом собой Synchronize() выполнит все в порядке очереди. |
13.03.2013, 16:25 | #2 |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
А процедура/функция LOG что делает? Записывает в файл? Если да, то могу предложить завести ещё один поток, который будет содержать TSringList(или что-то аналогичное). Каждые поток будет добавлять туда нужную инфу, а логирующий поток потихоньку записывать. Это будет работать быстрее. Естсетсвенно надо будет объявить этот список в критической зоне(или как она там называется).
Если вы не хотите чтобы потоки тратили время, ожидая доступа к критической секции, то могу предложить ещё вариант - в каждом потоке создать поле, в которое он будет заносить необходимую информацию, а логирующий поток будет потихоньку собирать и записывать всю эту информацию. P.S. Если у вас потоков не много, то оставьте всё как есть. Времени вы много не выйграете. |
13.03.2013, 16:57 | #3 | |
Форумчанин
Регистрация: 27.03.2012
Сообщений: 438
|
Цитата:
Как не крути придется синхронизировать добавление, приходим к тому от чего ушли.)) |
|
13.03.2013, 17:06 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Используйте крит. секции.
Я обычно делаю пул куда сообщения ставятся в очередь и по мере поступления идут в лог, а потоки ждут только установки сообщения в очередь, и не простаивают. Из очереди сообщения идут на вывод в зависимости от их важности. |
13.03.2013, 17:10 | #5 | |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
Цитата:
Либо второй вариант. |
|
13.03.2013, 17:11 | #6 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
потом (ВНЕ syncrone) медленно-медленно выгружаем буфер. БУФЕР должен уметь накапливать информацию (два и более быстрых добавлений) и избавляться от уже выгруженной Цитата:
Цитата:
Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 13.03.2013 в 17:13. |
||||
13.03.2013, 17:24 | #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 |