powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / виснет экранная форма
25 сообщений из 155, страница 1 из 7
виснет экранная форма
    #40106064
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приложение работает, процессы идут (прием/передача данных устройствам, данные в базу данных пишутся).
А вот кнопки на приложении перестают нажиматься, но ...
Иногда их отрисовка пропадает, остаются только надписи

какой диагноз?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106065
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

Диагноз: осуществление тяжёлых операций в основном потоке приложения, мешающее отрисовке и прочему гуёвому функционалу.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106067
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

процессор при этом грузится на 20-50%.

потом приложение может зависнуть...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106069
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73,

Работу с приемом/передачей данных, равно как и многочисленные взаимодействия с БД можно оформить в потоки. Ну а прогресс этих действий уже передавайте в основной поток.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106071
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно пойти упрощенным путем, используя Parallel Programming Library (PPL):
http://www.proghouse.ru/programming/36-delphi-xe7-ppl
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106073
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
приложение работает, процессы идут (прием/передача данных устройствам, данные в базу данных пишутся).
А вот кнопки на приложении перестают нажиматься, но ...
Иногда их отрисовка пропадает, остаются только надписи

какой диагноз?

Скорее всего вы говорите о потоках, а не о процессах в понимании ОС. И скорее всего в этих потоках слишком многое обёрнуто в Synchronize. А то что обёрнуто в Synchronize выполняется в главном потоке.
Ну а для окончательного диагноза нужно видеть код.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106087
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Softologic,

так и сделано
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106088
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener,

не использую синхронайз
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106089
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Softologic
Можно пойти упрощенным путем, используя Parallel Programming Library (PPL):
http://www.proghouse.ru/programming/36-delphi-xe7-ppl


весьма интересная вещица
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106101
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
northener,

не использую синхронайз

А как сейчас передаете в основную форму инфу? Через Send\PostMessage ?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106194
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
через глобальные переменные из основной формы
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106226
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
через глобальные переменные из основной формы

Общение между потоками через глобальные переменные из основной формы?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106229
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
Общение между потоками через глобальные переменные из основной формы?

между потоком и основной формой-родителем.
что такого?
да и общение то минимальное. в основном - выдача результата в основную форму
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106234
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

Думаю, ошибка всё-таки где-то в твоём секретном коде, который здесь показывать нельзя.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106247
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
wadman
Общение между потоками через глобальные переменные из основной формы?

между потоком и основной формой-родителем.
что такого?
да и общение то минимальное. в основном - выдача результата в основную форму

Хотелось бы увидеть пример такой минимальной выдачи результата в основную форму.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106248
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73

процессор при этом грузится на 20-50%.

процессор? одно ядро, что-ль? Разберитесь с загрузкой ядер вашими threads. Если у вас проц 8ядерный, так 50% загрузки процессора означают полную загрузку 4х ядер (4мя threads).
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106249
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Mizer73,

Думаю, ошибка всё-таки где-то в твоём секретном коде, который здесь показывать нельзя.

+100500
Прием/передачу данных устройствам хотелось бы увидеть.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106262
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
через глобальные переменные из основной формы
А как код в основном потоке "узнаёт", что эта переменная изменилась и нужно что-то с ней сделать (отобразить или записать в БД и т.д.)?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106264
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62
Mizer73
через глобальные переменные из основной формы
А как код в основном потоке "узнаёт", что эта переменная изменилась и нужно что-то с ней сделать (отобразить или записать в БД и т.д.)?

+ 1
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106285
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Softologic,

основному потоку это знать незачем. он , просто, пользуется новыми данными.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106293
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
Softologic,

основному потоку это знать незачем. он , просто, пользуется новыми данными.

Ну если в контексте задачи это норм, то вопросов нет.
Однако, это не очень корректно с позиции модели бизнес-логики и паттернов проектирования я считаю. Впрочем, в паттернах я новичок и эти мои измышления субъективны :)
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106305
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
Softologic,

основному потоку это знать незачем. он , просто, пользуется новыми данными.
Можете подробней рассказать?
Из того, что вы написали в начале:
приложение работает, процессы идут (прием/передача данных устройствам, данные в базу данных пишутся). я представляю себе такой процесс: программа или послала запрос устройству, или устройство само прислало данные, эти данные были получены в дополнительном потоке, а потом записаны в глобальные переменные. Если бы дополнительный поток информировал об изменениях, например сообщением, то в обработчике сообщения в основном потоке (в главной форме) можно было бы запустить процедуру отображения новых данных или отправку их в БД.
А если основной поток не получает от дополнительного потока информации, что данные изменились, каком образом в основном потоке запускается отображение новых данных и их отправка в БД? По таймеру что ли, или как?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106511
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62,

у меня это делается так:
есть буфер.
основной поток туда пишет команды, которые должны быть переданы на исполнительное устройство.
поток по очереди эти команды забирает и отправляет на устройство.
так же в основном потоке, так получилось оптимальнее, принимаются ответы и пишутся в буфер ответов.
дополнительный поток получает ответы и меняет состояние логики исполнения процессов.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106520
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
s62,

так же в основном потоке, так получилось оптимальнее, принимаются ответы и пишутся в буфер ответов.

Вот это меня смущает. Работа с устройством наверно ведется в синхронном режиме. Отсюда и завис вырастает.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40106541
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы посмотрел в сторону использования "блокирующей очереди". В Delphi например имеется IOmniBlockingCollection в библиотеке OmniThreadLibrary. А там уже есть варианты - использовать несколько коллекций или одну или сколько потоков использовать в коллекциях. А основной поток должен получать событие о необходимости перечитать информацию из буфера. Но то же с каким то ограничением что бы не обновлять экран постоянно.
...
Рейтинг: 0 / 0
25 сообщений из 155, страница 1 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / виснет экранная форма
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]