Neo писал(а):
Но если использовать БД в памяти, то какие плюсы? Тот же стек, только еще прибавится работы со строками, верно?Tad писал(а):
Для более конкретной подсказки нужно видеть алгоритм проги.
Ответов: 16884
Рейтинг: 1239
|
|||
Neo писал(а): Но если использовать БД в памяти, то какие плюсы? Тот же стек, только еще прибавится работы со строками, верно?Tad писал(а): Для более конкретной подсказки нужно видеть алгоритм проги. |
|||
карма: 25 |
|
Ответов: 704
Рейтинг: 7
|
|||
Ребята, в общем что-то я пришел в отчаянье: проработало 5 суток и зависло. При этом таймер внутреннего отсчета показывает на момент зависания всегда цифру по маске "*998". Например 123998 или 244998. Внутренний отсчет этот построен таким образом: code_25005.txt
Выбрал кусочек схемы. Там принцип в том, чтоб не возиться с реальным временем, а тупо считать себе свое исчисление. Правда каждый тик таймера проверяется в 2 разных БД SQLite. Но тормозов это вроде не дает, да и времени в 100 для этого вагон и тележка. ------------ Дoбавленo в 21.07: Сам себя проверяя, думаю может таймер потоком заменить с синхронизированным выходом? Но разве может он так портить жизнь? ------------ Дoбавленo в 21.07: Если так, то ММтаймер получается вообще лучше не ставить... |
|||
карма: 0 |
| ||
файлы: 1 | code_25005.txt [958B] [218] |
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): ММтаймер получается вообще лучше не ставить...У меня с ним схемы месяцами работают без проблем. Neo писал(а): проработало 5 суток и завислоВедите параллельные логи из разных частей схемы, отслеживайте, какое место не отрабатывает. |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
Дело в том, что при зависании нет возможности просмотреть дебаг же. А зависание всегда четко на счете *998.
------------ Дoбавленo в 21.24: Это 998 откуда берется? Почему именно это значение? ------------ Дoбавленo в 21.32: И еще: программа запущенная под HiAsm работает в ограничениях? Потому, что если оставить так программу после компиляции - она висла за сутки, а если запустить уже готовый exe - работает и до месяца. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
На всякий случай поставьте SafeMode (с NoWait и уникальным именем)сразу на выходе onTimer, просто чтобы исключить "нагон" одним потоком - другого. Либо используйте Thread с ненулевым Delay.
|
|||
карма: 1 |
| ||
Голосовали: | Neo |
Ответов: 704
Рейтинг: 7
|
|||
Подскажите, какой из этих компонентов дает на выходе, к которому подведено сообщение, новый поток?
Компонент порта прилагаю http://hiasm.com//getfile/5987 code_25011.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_25011.txt [673B] [216] |
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Neo писал(а): Подскажите, какой из этих компонентов дает на выходе, к которому подведено сообщение, новый поток?ComAsync. У него и название говорит само о себе -- асинхронный COM-порт |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
nesco, но если я считываю по eventchar, то разве это асинхронное действие? Я подозреваю из-за этого жизненно важного компонента, у меня все проблемы. Получается нужно стек на выходе из него поставить?
------------ Дoбавленo в 20.29: И снова возвращаюсь к прошлой проблеме. 1nd1g0, разъясни еще с критическими секциями: почему этот пример считает разные значения в дебаге и отрабатывает неправильно при несколько разовом нажатии +100 хоть в схеме с сейфмод, хоть без него?
Компонент For поставлен как нагрузка схеме. |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Neo писал(а): Получается нужно стек на выходе из него поставить?А что мешает попробовать |
|||
карма: 22 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo, весь топик не устаю повторять, что SafeMode логично ставить после onExec, и с элементами интерфейса на форме из потоков работать нельзя. И многопоточная отладка, боюсь, Вас только запутает - параллельные экземпляры Debug тоже должны конфликтовать по примеру остальных участков схемы.
|
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
nesco, уезжал на вечер и боялся оставить без контроля - вдруг зависнит. Попробую обязательно, только додумался.
1nd1g0, осмелюсь попросить Вас набросать: как сделать в этой схемке правильно, и чтоб не работать с интерфейсом из потока? И как тогда расставить дебаги, почему они параллельные? Универсально, так сказать. Раньше не раз нуждался в подобном (как думаю и другие), а сейчас просто "припекло". Весь опыт только из HiAsm, поэтому все познаю только шерстением форума. С другой стороны, сейчас не все программисты знают первоисточники 1/0 программирования, и программируют для себя за счет оболочек . |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): набросать: как сделать в этой схемке правильно"Правильность", при условии неизвестности алгоритма программы в целом, - категория относительная, но я уже давал простейшие схемы с одним потоком и ненулевой Delay. Дебаги перестанут сбоить сразу же, как они окажуться в ветке, порождённой точкой onSafeMode. |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
Я что-то не понимаю, или каждую схемочку нужно строить каждый раз по-другому, из-за алгоритма программы?
Я не могу добиться преобразования асинхронного потока в синхронизированную очередь и весь топик посвящен этому. Потом буду применять эту схемку в разных позах во всех остальных программах, где нужно будет разгружать такие вот накопления событий и дальше их обрабатывать. Сори, но Ваши схемы не дают результат безошибочной обработки. Как же данные, которые идут на дебаг (события от таймера)? Это для примера таймер поставлен, а с такой же завидной регулярностью данные могут вылететь из com-порта, и, получается, не дойдут до обработки? |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Neo писал(а): "Я не могу добиться преобразования асинхронного потока в синхронизированную очередь и весь топик посвящен этому.""stream" и "thread" совершенно разные вещи, хотя и переводятся одним словом "поток" ("thread" имеет ещё одно значение - "нить") Может быть запустить "асинхронный stream" в отдельном "thread" и разобраться с синхронизацией ? Neo писал(а): Сори, но Ваши схемы не дают результат безошибочной обработки.Насчет советов: Tad писал(а): Для более конкретной подсказки нужно видеть алгоритм проги. 1nd1g0 писал(а): "Правильность", при условии неизвестности алгоритма программы в целом, - категория относительная------------ Дoбавленo в 20.45: Мой преподаватель когда-то говорил: Если что-то работает не так как надо - ошибка в алгоритме. ------------ Дoбавленo в 20.45: ( и не только в программировании) |
|||
карма: 25 |
|
Ответов: 704
Рейтинг: 7
|
|||
Tad, я и говорю, что ошибка в алгоритме. Совсем не хочу уличить аппаратную часть ПК в ошибке )))
Но алгоритм я привел - описал почему, что да как. Советы есть даже с конкретными примерами, но примеры не работают под нагрузкой, а советы остаются на уровне "должно работать". При чем все "Опытные" утверждают в топике, что у всех потоки работают без сбоев, а схему мою не могут толком не "разбить в пух", не "утвердить на оскар". Я вижу что не пашет, но моих знаний программирования, выращенных на HiAsm, явно мало чтоб различить асинхронный stream от thread - для меня это одно и то-же - квадратик с иконочкой на поле HiAsm, который позволяет программе не тормозя работать. ------------ Дoбавленo в 20.53: И поскольку схемка претендует на уникальность, раз нет таких универсальных аналогов для поочередного исполнения очереди, то думал прийти к решению вместе за нехваткой знаний о жизни за пределами HiAsm. ------------ Дoбавленo в 20.54: Но с каждым ответом знающих, вижу что такая проблема волнует только меня ------------ Дoбавленo в 20.56: Ответ с базами, считаю нерентабельным поскольку из этой базы нужно еще читать, а это тот же геморрой, только сбоку. Поток ведь все равно нужно контролировать и пускать только в свободные от вычислений закоулки схемы. ------------ Дoбавленo в 20.59: И если есть утверждения, что база сама способна управлять выдаваемыми потоками - это заблуждение. База их выплевывает как "Максим" пули. И ей совсем все равно успел предыдущий пройти просчеты или нет. |
|||
карма: 0 |
|