Давайте в этой теме соберем все советы и все то что нельзя или не стоит делать в построение схемы Hiasm, ведь бывают случае что допускают ошибки в схемах, которые могут привести к нежелательным ошибкам в программах. Добавляете две схемы в которой есть ошибка и в которой эта ошибка исправлена. оставляйте свои советы основанные на большом опыте работы в среде Hiasm.
P.S.
Надеюсь что эта тема поможет многим в правильном построение схема.
Этот топик читают: Гость
Ответов: 195
Рейтинг: 7
|
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Про потоки, выдержка из параллельного топика
nesco писал(а): На будущее, событие onExec происходит в другом потоке приложения, и выполнение его цепи событий никак не совпадает с очередью сообщений главного приложения, те отсутствует синхронизация. Вот почему, запущенная цепь событий другого потока не влияет на очередь сообщений приложения, и приложение не тормозит, если других потоков не сотня, конечно. Чтобы синхронизироваться с очередью сообщений приложения и существует событие onSyncExec. И если таймер дополнительного потока выставил итерацию на точке onExec, то на точке onSyncExec событие появится только тогда, когда закончится вся цепь событий точки onExec, управление будет передано системе, и очередь дойдет до обслуживания очереди сообщений приложения. Все это говорит о том, что событие onSyncExec выполняется синхронно с очередью сообщений приложения, тк обрабатывается именно в этой очереди. Кстати, уничтожать поток крайне желательно именно из точки onSyncExec, если установлено выполнение потока только один раз (FastStop=True), тк поток не уничтожится, а просто остановится, занимаяя ресурсы процессорного времени.Применение элемента Thread ничем практически не отличается от применения элемента MMTimer (в первом случае поток создается приложением, во втором случае -- системой), если только не надо что-то обработать в приложении строго по окончанию действия цепи событий таймерной итерации (к примеру, дать команду на перерисовку формы), но это обязательно будет через некоторое время, необходимое на передачу управления обработчику очереди сообщений приложения, и это время может отличаться от итерации к итерации, те никак не обеспечит точности выдачи итерацийОткуда следует, что давать какое-либо событие визуальному контролу с точки onExec крайне нежелательно (также, как и с точки onTimer MMTimer-a), тк эти точки работают из другого потока, а отрисовка происходит в основном. В момент подачи события, приложение может отрисовываться, что приведет к крэшу программы, что мы, кстати, часто и наблюдаем в некоторых схемах |
|||
карма: 22 |
|
Ответов: 1821
Рейтинг: 168
|
|||
hin4 писал(а): Чего не стоит делать... |
|||
карма: 5 |
| ||
Голосовали: | iarspider |
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 7 раз(а), последний 2021-06-24 08:12:21 |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
Неконтролируемо обращаться к ресурсу из разных потоков. Например читать и писать в StrList. Необходимо или использовать критические секции и мьютексы или строить логику ПО так чтобы избежать одновременного использования ресурса.
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Давать советы.
|
|||
карма: 25 |
|
6