Вверх ↑
Этот топик читают: Гость
Ответов: 8930
Рейтинг: 823
#31: 2011-08-14 18:40:03 ЛС | профиль | цитата
code_24897.txt
------------ Дoбавленo в 18.40:
Вот, поэксперементируйте
карма: 19

0
файлы: 1code_24897.txt [739B] [136]
Ответов: 704
Рейтинг: 7
#32: 2011-08-14 18:44:35 ЛС | профиль | цитата
Гляньте, пожалуйста это. Видать сильно сегодня наотмечался, что "слона не заметил".
code_24898.txt
------------ Дoбавленo в 18.42:
Леонид, уже заценил прикол. Вот оно как оказывается дурят нас маленьких сколько не ставь, а оно тебе всеравно 64 упал под стол
------------ Дoбавленo в 18.44:
1nd1g0 писал(а):
Вы таймер останавливаете потоком, который он же и породил.
но а как же го остановить? Кстати, уже не таймер, а thread.
карма: 0

0
файлы: 1code_24898.txt [1.8KB] [116]
Ответов: 3889
Рейтинг: 362
#33: 2011-08-14 18:54:35 ЛС | профиль | цитата
Neo писал(а):
но а как же го остановить?

Да там AutoStop есть, если важно останавливать, а вообще я меняю логику в таких случаях. У Вас потоки быстро завершаются, потому пока не заметно. Но в некоторых ситуациях долго можно сидеть и не понимать, почему схема не работает так, как должна, а дело оказывается в самоуправлении какого-нибудь таймера (конфликт доступа нескольких потоков к его флагу активности). Это я Вам из реального опыта говорю.
------------ Дoбавленo в 18.54:
Neo писал(а):
сколько не ставь, а оно тебе всеравно 64


Add(Label,1937080,553,133)
{
Left=160
Top=25
}
Add(Edit,14376658,322,70)
{
Left=95
Top=20
Text="10"
DataType=2
link(onEnter,1662503:doEvent1,[])
}
Add(Counter,1156401,511,84)
{
Max=10000
}
Add(Hub,13628832,469,133)
{
link(onEvent1,13507438:doData,[])
link(onEvent2,1156401:doReset,[(497,146)(497,104)])
}
Add(DoData,13507438,511,133)
{
link(onEventData,1937080:doText,[])
link(Data,1156401:Count,[])
}
Add(Hub,1662503,364,77)
{
OutCount=4
link(onEvent1,14376658:doText2,[(392,83)(392,64)(307,64)(307,83)])
link(onEvent2,14323517:doStop,[(396,90)(396,97)])
link(onEvent3,14323517:doInterval,[(396,97)(396,104)])
link(onEvent4,14323517:doTimer,[(396,104)(396,90)])
}
Add(MMTimer,6304044,420,133)
{
link(onTimer,13628832:doEvent1,[])
}
Add(MMTimer,14323517,413,84)
{
Interval=1
Point(doInterval)
link(onTimer,1156401:doNext,[])
}

Neo, А так
карма: 1

0
Ответов: 704
Рейтинг: 7
#34: 2011-08-14 19:04:44 ЛС | профиль | цитата
1nd1g0, а зачем же тогда обычный таймер нужен? Получается толкьо независимый таймер работает правильно?
------------ Дoбавленo в 19.04:
Или я дурак, или лыжи... Помогите, пожалуйста, сделать схемку, которая бы обслуживала стек и выдавала данные по мере возможностей обработки. То есть выдает второе, только когда пришел отчет о выполнении первого. Ну и главное - обработка выданых данных чтоб проиходила в отдельном потоке.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#35: 2011-08-14 19:13:07 ЛС | профиль | цитата
1nd1g0 писал(а):
А так
Neo писал(а):
толкьо независимый таймер работает правильно
Ну да, до тех пор, пока время обработки интерации менее уставки "независимого таймера"
карма: 19

0
Ответов: 704
Рейтинг: 7
#36: 2011-08-14 19:16:17 ЛС | профиль | цитата
Такую схему без обработки выдачи в новом потоке я реализовал(которая тормозит всю остальную часть программы), а вот с потоком - что-то не вяжется.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#37: 2011-08-14 19:21:53 ЛС | профиль | цитата
Neo писал(а):
а зачем же тогда обычный таймер нужен?

У них разная технология работы, обычный таймер работает на очереди сообщений, соответственно не такой точный и требует обработчика сообщений (грубо говоря - оконной процедуры, если приложение с окном, потому с ним и синхронизирован).
Независимый же таймер работает именно как генератор независимых потоков, что объясняет его название. Но за точность приходится расплачиваться быстродействием, если его не будет хватать, как заметил Леонид, появится второй поток и потребует доступ к тем же данным, над которыми уже работает первый. Последствия могут быть очень "весёлыми"
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#38: 2011-08-14 19:25:34 ЛС | профиль | цитата
Вы все забыли, что в пакете есть компонент SafeMode. На него нет справки, но есть пример -- %Hiasm%ElementsDelphiExampleSystemSafeMode.sha
карма: 22

0
Ответов: 8930
Рейтинг: 823
#39: 2011-08-14 19:55:03 ЛС | профиль | цитата
nesco, для его, SafeMode, использования недостаточно "интуитивно-понятного" интерфейса,
------------ Дoбавленo в 19.54:
но и достаточные знания о работе компьютера, которыми, увы, не все имеют (я в т. ч. ).
------------ Дoбавленo в 19.54:
Мне не удалось корректно заставить при обработке звука ждать окончания обработки порции данных,
------------ Дoбавленo в 19.55:
когда обработка затягивалась на время, превышающее период выдачи порций звуковых данных.
карма: 19

0
Ответов: 3889
Рейтинг: 362
#40: 2011-08-14 20:08:10 ЛС | профиль | цитата
Леонид писал(а):
для его, SafeMode, использования недостаточно "интуитивно-понятного" интерфейса,

Это нормально, среди "текстовых" программистов тоже не каждый понимает что такое мьютекс или критическая секция (особенно - с различиями в реализации на разных ОС).
Леонид писал(а):
Мне не удалось корректно заставить при обработке звука ждать окончания обработки порции данных,

Если актуально, может выделите в отдельную тему, попробуем помочь.
------------ Дoбавленo в 20.08:
Neo, обратите внимание, что у потока снизу есть сигнальный флаг, по которому можно отслеживать, работает ли он в данный момент. Ждать окончания его работы - один из способов избежать конфликтов.
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#41: 2011-08-14 20:08:21 ЛС | профиль | цитата
1nd1g0 писал(а):
Если актуально, может выделите в отдельную тему, попробуем помочь

А может это и Neo поможет
карма: 22

0
Ответов: 704
Рейтинг: 7
#42: 2011-08-14 20:38:28 ЛС | профиль | цитата
Действительно, даже не предполагал зачем этот мьютекс. Жаль в справке инфа, воспевающая его полезность, отсуствует. Попробую покрутить.
------------ Дoбавленo в 20.30:
nesco, Вы правы, у меня ситуация практичесски такая же. То есть глюки если вдруг обработка порции дольше чем обычно. Думаю вполне обоснованно сделать компонентик (схемку), которая будет универсальна для любой последовательной очереди. То есть такую схемку уже наваял, но теперь кручу к ней потоки. Если выйдет - сколько задач станут проще реализовываться даже для слабых компьютеров.
------------ Дoбавленo в 20.38:
Различий не заметил. Так же потоки не хотят ровно вставать в схему.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#43: 2011-08-14 20:44:55 ЛС | профиль | цитата
Neo писал(а):
Попробую покрутить.

Для синхронизации потоков в пределах одного процесса эффективнее критические секции (SafeMode Mode=Local).
------------ Дoбавленo в 20.44:
Neo писал(а):
не хотят ровно вставать в схему


карма: 1

0
Ответов: 704
Рейтинг: 7
#44: 2011-08-14 20:47:18 ЛС | профиль | цитата
Вот такое работает, но проблема в том, что пинок для следующей порци из стека нужно давать после того, как по предыдущим данным выйдет результат из sqlite. То есть из другого потока в этот (если я прав).

code_24901.txt

карма: 0

0
файлы: 1code_24901.txt [2.1KB] [149]
Ответов: 3889
Рейтинг: 362
#45: 2011-08-14 20:55:26 ЛС | профиль | цитата
Neo, а не преесмотреть ли логику Вашей программы?

[режим телепата]
Настроить Thread на больший Delay + BusyEvent=Ignore и работать со стеком прямо из него через SafeMode. Писать в стек также через SafeMode. Завершать поток только после отработки движка БД
[/режим телепата]
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)