Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
DLL экспортирует функцию SetCallback, через которую устанавливается обработчик в основном модуле. Из этого обработчика через Synchronize обновляются контролы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2021, 10:57 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov через Synchronize обновляются контролы Спасибо за подсказку Synchronize - эффектно применять при поэтапном выполнении процесса, если возникает необходимость в допуске к данному ресурсу(переменной) нескольким сторонним процессам. В данном случае речь идет об УЖЕ законченном потоке и уничтожении объектов в момент высвобождении памяти FreeLibrary. Такое впечатление что система зафиксировала объекты с которыми работала в DLL (не только созданными) и Destro-т их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2021, 11:11 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
Synchronize необходимо применять всегда, когда неосновной поток должен взаимодействовать с визуальными VCL контролами. DLL в свою очередь не должна ничего знать о визуальных контролах (особенно, если она предназначена для использования из программ, написанных не на Delphi). К DLL вообще нежелательно подключать какие-либо модули VCL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2021, 11:43 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov К DLL вообще нежелательно подключать какие-либо модули VCL. Как например - вывести промежуточные результаты ? Если Вы примените Synchronize в цикле потока Вы нивелируете эффект потока и основная форма будет блокирована. По крайней мере у меня такой эффект. Хотел бы иметь "живую" форму и явно блокирую только кнопку выполнения. Synchronize- можно применить по результатам отдельных этапов выполнения задач. Но основной вопрос не в этом - эффект без Synchronize, меня устраивает (попробую в конце потока может поможет....) "В данном случае речь идет об УЖЕ законченном потоке и уничтожении объектов в момент высвобождении памяти FreeLibrary. Такое впечатление что система зафиксировала объекты с которыми работала в DLL (не только созданными) и Destro-т их." Может как-то указатель передать - и обнулить его до освобождения памяти ? Спасибо за обсуждение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2021, 15:12 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X Как например - вывести промежуточные результаты ? Если Вы примените Synchronize в цикле потока Вы нивелируете эффект потока и основная форма будет блокирована. С какого перепугу? Обновиться индикатор где-нибудь в строке состояния и все. Главное - не обновлять слишком часто, чтобы накладные расходы на прогресс индикатор не превысили собственно расчет. Раз в секунду - и нормально. В ваш код не вникал, как тут уже писали - там все плохо. Вот переделаете как я сказал - тогда и проблемы исчезнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2021, 15:59 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
axim Rusov, Сменил объект визуализации вместо TStatusPanel просто TPanel Все заработало без проблем и без общей смены архитектуры библиотеки и объектов. Повторюсь у меня на это DLL и с TStatusPanel в основной форме, достаточно много приложений нормально и долго РАБОТАЕТ !!! Тут маленькая форма из двух циклов заняла 4 дня траханины. Это даже не секс - это некая 64 bit ...ОПА. Насчет замечаний - принято, полагаю еще буду вопрошать Всем спасибо за участие и вопросы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 00:19 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X, ЧИТД. У вас где-то проблема с памятью. Т.е. при уничтожении dll она подчищает за собой память и очищает память, которая используется в основном модуле. Сменив тип объекта вы изменили и занятую память так, что в данный момент dll перестала залазить на чужую память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 09:29 |
|
||
|
Ошибка при работе с потоками в DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X В момент закрытие библиотеки DLL после выполнения всего процесса FreeLibrary(LibHandle); Безотносительно прочего и ошибки, в которой таки стоит разобраться, пока она не стрельнула иначе где-нибудь ещё - я не понимаю, откуда и зачем у людей странное стремление выгружать DLL посреди работы. Для чего, только для того, чтобы чуть позже пользователь тратил дополнительное время, ожидая повторной загрузки? Лично я знаю две разумных причины для такой выгрузки: 1. Обновление (смена версии dll) 2. Во время отладки вносить изменения в dll, не перезапуская exe HOME_X и сообщения о статусе выполнения работ передается в основную форму TStatusBar.Panels[1].Text:='Work/Closed и т.д.' Это архитектурная ошибка, которую стоит исправить. Потоку незачем знать о каких-то статуспанелях. Его дело - отрапортовать о своём состоянии (главной форме или отдельному объекту). А уж тот пусть решает, вывести ли это текстом в статусбар, какой-нибудь иконкой или вообще забить. Это не вопрос потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 11:29 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2037336]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
10ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 153ms |

| 0 / 0 |
