Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2014, 17:15   #1
oleg_swimmer
 
Регистрация: 28.08.2011
Сообщений: 6
По умолчанию Вывод строк в Memo в ходе решения задачи

Здравствуйте!
Работаю с Delphi 7, Windows 7
В ходе решения вычислительной задачи промежуточные данные выводятся в виде строк в Memo. Все хорошо, но стоит только перейти от своей программы к другому приложению, например браузеру, то вывод строе в memo прекращается, хотя решение задачи продолжается. При щелчке по форме выдается сообщение, что приложение не отвечает. После окончания все данные сразу выдаются в memo. Вообще, стоит только задаче потерять фокус и все повторяется. Прошу помочь, так как задача длительная и пользователь должен видеть ход процесса.
oleg_swimmer вне форума Ответить с цитированием
Старый 18.02.2014, 17:37   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Для этого используй потоки.
FaTaL вне форума Ответить с цитированием
Старый 18.02.2014, 17:41   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
После окончания все данные сразу выдаются в memo.
Сколько строк при этом получается?
northener вне форума Ответить с цитированием
Старый 18.02.2014, 17:58   #4
oleg_swimmer
 
Регистрация: 28.08.2011
Сообщений: 6
По умолчанию

строк може быть много, от 5 до 20 тысяч
oleg_swimmer вне форума Ответить с цитированием
Старый 18.02.2014, 18:09   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от oleg_swimmer Посмотреть сообщение
строк може быть много, от 5 до 20 тысяч
Слишком много. Избавляйся от такого количества. Либо лог файл, либо пересмотр информативности строк, и выкидывание неинформативных излишков. И как я понимаю при потере фокуса программа не "вешается", а скидывается в файл подкачки. Со всеми вытекающими. Диспетчер задач глянь, сколько памяти кушает программа.
doktor255 вне форума Ответить с цитированием
Старый 18.02.2014, 18:24   #6
oleg_swimmer
 
Регистрация: 28.08.2011
Сообщений: 6
По умолчанию

[QUOTE=doktor255;1342801]Слишком много. Избавляйся от такого количества.

Может быть и так. Но я пробовал просто выводить строки по одной в Label, когда последующая строка просто затирает предыдущую, информируя пользователя и следующем шаге. Эфффект тот же самый. Более того, прогресс хода решения задачи отображал только в ProgressBar, однако и тогда потяря фокуса вызывала зависание полоски прогресса, но сама задача продолжалась и завершалась успешно.
oleg_swimmer вне форума Ответить с цитированием
Старый 18.02.2014, 18:29   #7
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Скорее всего скорость получения данных слишком высока. Необходимо обрабатывать данные не на прямую, а использовать буферизацию. Вообще для принятия какого либо толкового решения по вопросу нужно смотреть непосредственно сам код.
P.S. Положи весь лог в StringList, а в memo выведи первые 10 строк, и выводи оставшиеся по мере скроллинга. Гарантированно не будет подвисать.

Последний раз редактировалось doktor255; 18.02.2014 в 18:33.
doktor255 вне форума Ответить с цитированием
Старый 18.02.2014, 18:32   #8
oleg_swimmer
 
Регистрация: 28.08.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Скорее всего скорость получения данных слишком высока. Необходимо обрабатывать данные не на прямую, а использовать буферизацию. Вообще для принятия какого либо толкового решения по вопросу нужно смотреть непосредственно сам код.
Подскажите, где прочитать про буферизацию, потому что кажется вы точно уловили суть моей проблемы.
oleg_swimmer вне форума Ответить с цитированием
Старый 18.02.2014, 18:32   #9
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

[QUOTE=oleg_swimmer;1342806]
Цитата:
Сообщение от doktor255 Посмотреть сообщение
Слишком много. Избавляйся от такого количества.

Может быть и так. Но я пробовал просто выводить строки по одной в Label, когда последующая строка просто затирает предыдущую, информируя пользователя и следующем шаге. Эфффект тот же самый. Более того, прогресс хода решения задачи отображал только в ProgressBar, однако и тогда потяря фокуса вызывала зависание полоски прогресса, но сама задача продолжалась и завершалась успешно.
В чем проблема сделать два потока (или один рабочий поток и таймер)
1) Один выполняет рассчеты, а результат с помощью критической секции заносит в переменную
2) Другой поток(таймер) через, скажем 100 или 1000мс обновляет информацию из тех переменных?
STRELOK-2007 вне форума Ответить с цитированием
Старый 18.02.2014, 18:37   #10
oleg_swimmer
 
Регистрация: 28.08.2011
Сообщений: 6
По умолчанию

[QUOTE=STRELOK-2007;1342815]
Цитата:
Сообщение от oleg_swimmer Посмотреть сообщение

В чем проблема сделать два потока (или один рабочий поток и таймер)
1) Один выполняет рассчеты, а результат с помощью критической секции заносит в переменную
2) Другой поток(таймер) через, скажем 100 или 1000мс обновляет информацию из тех переменных?
Спасибо, разберусь, переделаю. Спасибо за поддержку.
oleg_swimmer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация (сокращение) кода решения задачи #46 c acmp.ru - вывод числа E с заданной точностью Poma][a Паскаль, Turbo Pascal, PascalABC.NET 47 05.07.2013 23:50
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
Алгоритм решения задачи snpccvs Помощь студентам 8 13.02.2012 22:50
Решения задачи* asso Паскаль, Turbo Pascal, PascalABC.NET 5 11.12.2011 08:29
вывод решения в файл, с++ DimR Помощь студентам 1 31.10.2011 20:49