code_24897.txt
------------ Дoбавленo в 18.40:
Вот, поэксперементируйте
Этот топик читают: Гость
Ответов: 8930
Рейтинг: 823
|
|||
карма: 19 |
| ||
файлы: 1 | code_24897.txt [739B] [136] |
Ответов: 704
Рейтинг: 7
|
|||
Гляньте, пожалуйста это. Видать сильно сегодня наотмечался, что "слона не заметил".
code_24898.txt ------------ Дoбавленo в 18.42: Леонид, уже заценил прикол. Вот оно как оказывается дурят нас маленьких сколько не ставь, а оно тебе всеравно 64 упал под стол ------------ Дoбавленo в 18.44: 1nd1g0 писал(а): Вы таймер останавливаете потоком, который он же и породил. |
|||
карма: 0 |
| ||
файлы: 1 | code_24898.txt [1.8KB] [116] |
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): но а как же го остановить?Да там AutoStop есть, если важно останавливать, а вообще я меняю логику в таких случаях. У Вас потоки быстро завершаются, потому пока не заметно. Но в некоторых ситуациях долго можно сидеть и не понимать, почему схема не работает так, как должна, а дело оказывается в самоуправлении какого-нибудь таймера (конфликт доступа нескольких потоков к его флагу активности). Это я Вам из реального опыта говорю. ------------ Дoбавленo в 18.54: Neo писал(а): сколько не ставь, а оно тебе всеравно 64
|
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
1nd1g0, а зачем же тогда обычный таймер нужен? Получается толкьо независимый таймер работает правильно?
------------ Дoбавленo в 19.04: Или я дурак, или лыжи... Помогите, пожалуйста, сделать схемку, которая бы обслуживала стек и выдавала данные по мере возможностей обработки. То есть выдает второе, только когда пришел отчет о выполнении первого. Ну и главное - обработка выданых данных чтоб проиходила в отдельном потоке. |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
1nd1g0 писал(а): А такNeo писал(а): толкьо независимый таймер работает правильно |
|||
карма: 19 |
|
Ответов: 704
Рейтинг: 7
|
|||
Такую схему без обработки выдачи в новом потоке я реализовал(которая тормозит всю остальную часть программы), а вот с потоком - что-то не вяжется.
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): а зачем же тогда обычный таймер нужен?У них разная технология работы, обычный таймер работает на очереди сообщений, соответственно не такой точный и требует обработчика сообщений (грубо говоря - оконной процедуры, если приложение с окном, потому с ним и синхронизирован). Независимый же таймер работает именно как генератор независимых потоков, что объясняет его название. Но за точность приходится расплачиваться быстродействием, если его не будет хватать, как заметил Леонид, появится второй поток и потребует доступ к тем же данным, над которыми уже работает первый. Последствия могут быть очень "весёлыми" |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Вы все забыли, что в пакете есть компонент SafeMode. На него нет справки, но есть пример -- %Hiasm%ElementsDelphiExampleSystemSafeMode.sha
|
|||
карма: 22 |
|
Ответов: 8930
Рейтинг: 823
|
|||
nesco, для его, SafeMode, использования недостаточно "интуитивно-понятного" интерфейса,
------------ Дoбавленo в 19.54: но и достаточные знания о работе компьютера, которыми, увы, не все имеют (я в т. ч. ). ------------ Дoбавленo в 19.54: Мне не удалось корректно заставить при обработке звука ждать окончания обработки порции данных, ------------ Дoбавленo в 19.55: когда обработка затягивалась на время, превышающее период выдачи порций звуковых данных. |
|||
карма: 19 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Леонид писал(а): для его, SafeMode, использования недостаточно "интуитивно-понятного" интерфейса,Это нормально, среди "текстовых" программистов тоже не каждый понимает что такое мьютекс или критическая секция (особенно - с различиями в реализации на разных ОС). Леонид писал(а): Мне не удалось корректно заставить при обработке звука ждать окончания обработки порции данных,Если актуально, может выделите в отдельную тему, попробуем помочь. ------------ Дoбавленo в 20.08: Neo, обратите внимание, что у потока снизу есть сигнальный флаг, по которому можно отслеживать, работает ли он в данный момент. Ждать окончания его работы - один из способов избежать конфликтов. |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
1nd1g0 писал(а): Если актуально, может выделите в отдельную тему, попробуем помочьА может это и Neo поможет |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
Действительно, даже не предполагал зачем этот мьютекс. Жаль в справке инфа, воспевающая его полезность, отсуствует. Попробую покрутить.
------------ Дoбавленo в 20.30: nesco, Вы правы, у меня ситуация практичесски такая же. То есть глюки если вдруг обработка порции дольше чем обычно. Думаю вполне обоснованно сделать компонентик (схемку), которая будет универсальна для любой последовательной очереди. То есть такую схемку уже наваял, но теперь кручу к ней потоки. Если выйдет - сколько задач станут проще реализовываться даже для слабых компьютеров. ------------ Дoбавленo в 20.38: Различий не заметил. Так же потоки не хотят ровно вставать в схему. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): Попробую покрутить.Для синхронизации потоков в пределах одного процесса эффективнее критические секции (SafeMode Mode=Local). ------------ Дoбавленo в 20.44: Neo писал(а): не хотят ровно вставать в схему |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
Вот такое работает, но проблема в том, что пинок для следующей порци из стека нужно давать после того, как по предыдущим данным выйдет результат из sqlite. То есть из другого потока в этот (если я прав).
code_24901.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_24901.txt [2.1KB] [149] |
Ответов: 3889
Рейтинг: 362
|
|||
Neo, а не преесмотреть ли логику Вашей программы?
[режим телепата] Настроить Thread на больший Delay + BusyEvent=Ignore и работать со стеком прямо из него через SafeMode. Писать в стек также через SafeMode. Завершать поток только после отработки движка БД [/режим телепата] |
|||
карма: 1 |
|