Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
1

Долгий расчет больших циклов

04.06.2016, 08:09. Показов 1451. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! В Delphi 7 реально как-то сделать, чтобы большие циклы считались быстрее, а не целыми сутками?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2016, 08:09
Ответы с готовыми решениями:

Расчет ряда с помощью циклов/процедур
Помогите пожалуйста довести код до ума, нужно организовать его через процедуры/функции и добавить...

При обработке больших циклов форма с ProgressBar прорисовывается неполностью
Всем привет. Собственно, проблему озвучил. Логика программы такая: При нажатии кнопки "Экспорт...

Долгий-долгий запрос...
Ребята! :gsmile:Нужна ваша помощь! Ситуация следующая. Вызываю хранимую процедуру. Процедура...

Как получить сумму и произведение циклов с использованием одной строки циклов
Как получить сумму и произведение циклов с использованием одной строки циклов, а не трёх?. ...

38
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,661
Записей в блоге: 14
04.06.2016, 18:22 21
Author24 — интернет-сервис помощи студентам
Вам надо научиться:
  • Работе с потоками;
  • Разбивать задачу на отдельные подзадачи, и запускать их в отдельных потоках;
  • Синхронизировать дополнительные потоки и поток UI;
  • Отделять логику приложения от интерфейса пользователя.
Мусолить тему тут на форуме бесполезно, просто пишите код и учитесь. Под лежачий камень вода не течёт.
И до сих пор Вы не удосужились вывести код в читаемом виде, так что рассматривать его дальше не вижу смысла.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
04.06.2016, 18:27 22
Цитата Сообщение от Daniel5555 Посмотреть сообщение
Я сам должен видеть как в StringGrid они появляются и удаляются.
Так смотри 2 дня. По другому не получится никак.
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
04.06.2016, 18:47 23
ммм... Несколько раз прочитал цель. Но так и не понял. Можно попроще - что есть, что надо получить, какой результат ожидается в конце?
Весь проект скиньте, что ли...
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
04.06.2016, 19:14  [ТС] 24
А реально ли сделать такое в другом компоненте, если 1 и 0 заменить на разные два цвета?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
04.06.2016, 20:07 25
блин. про белого бычка
пункт 1
ввести все, что вам нужно, в StringGrid
пункт 2
из StringGrid ОДИН РАЗ перенести все в массив
пункт 3
за несколько секунд все посчитается
пункт 4
можете вернуть обработанные данные в Grid

всё
StringGrid ни под каким видом не должен участвовать в расчете
от слова вообще
сделайте отдельную процедуру, которая будет только работать с массивом
если будет все правильно, но расчет будет занимать хоть сколько-то заметное время, можно эту процедуру без проблем оформить в отдельный поток
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
04.06.2016, 20:25 26
Цитата Сообщение от Daniel5555 Посмотреть сообщение
А реально ли сделать такое в другом компоненте, если 1 и 0 заменить на разные два цвета?
Если алгоритм включает в себя постоянное обновление информации на экране, то никакой компонент не поможет. Хоть текст туда выводи, хоть цвет.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
05.06.2016, 00:23 27
представь себе, процессор обрабатывает 1000000 чисел в секунду
глазу достаточно 24 кадра в секунду
одно обновление экрана занимает пусть 50мсек
тогда 0.050 * 1000000 = 50000 сек только обновление экрана
не жирно???
вместо одной секунды, если бы он не обновлялся...

нормальный вариант прибегать к синхронизации каждые 500-1000 мсек
и человеку не скучно, и программа не отвлекается
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
05.06.2016, 00:30 28
Еще добавлю что наблюдение глазами за
Цитата Сообщение от Daniel5555 Посмотреть сообщение
StringGrid большой (120x120)
Это бред!
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
05.06.2016, 00:33  [ТС] 29
Krapotkin, а как сделать эту синхронизацию?
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
05.06.2016, 00:40 30
Цитата Сообщение от Daniel5555 Посмотреть сообщение
как сделать эту синхронизацию?
Сначала объясни зачем тебе нужно видеть глазами как что-то меняется в StringGrid? А про синхронизацию тебе пока рано пояснять, ибо она имеет отношение к визуализации выполнения дополнительных потоков.
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
05.06.2016, 00:41  [ТС] 31
я создал модель, там визуализируется хим. процесс
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
05.06.2016, 00:46 32
если данные не требуется вводить, а только рисовать, так и отрисовывайте свою модель вон на PaintBox или Image
расчет должен идти в отдельном потоке
там в каждом цикле проверять, не прошло ли 300-500-1000 мсек с последнего рисования
если прошло, то вызвать Synchrionize(Процедура_рисования_на_форме());
и запомнить текущее время например t:=GetTickCount();
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
05.06.2016, 01:03 33
Цитата Сообщение от Daniel5555 Посмотреть сообщение
визуализируется хим. процесс
В StringGrid визуализуется? Хм.
Согласен с krapotkin #32.

Добавлено через 13 минут
Хотя.
Не знаю что за хим. процесс, но я бы попробовал бы использовать грид. Но не TStringGrid, а TDrawGrid.
Но опять же вычисления выполняются в дополнительном потоке. И промежуточные результаты показываются либо по временному интервалу, либо по существенным изменениям в процессе.
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
05.06.2016, 01:06  [ТС] 34
Но я не пойму, как в DrawGrid проверить два соседних цвета, например, если ячейка зеленая и рядом желтая, то перекрасить обе эти ячейки в белый.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
05.06.2016, 01:15 35
Цитата Сообщение от Daniel5555 Посмотреть сообщение
Но я не пойму, как в DrawGrid проверить два соседних цвета, например, если ячейка зеленая и рядом желтая, то перекрасить обе эти ячейки в белый.
Блин!
Только самые лентяйные лентяи тебе не говорили, что грид (StringGrid/DrawGrid) должен использоваться только для визуализации! Все расчеты ты должен производить на отдельном двумерном массиве.
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
05.06.2016, 14:10 36
Я так и не дождался ни пояснений ни проекта...
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
02.07.2016, 10:59  [ТС] 37
Всем большое спасибо! Уже давно сделал через массивы, и все работает намного быстрее, в разы быстрее. Всем спасибо!!!
0
49 / 49 / 34
Регистрация: 16.02.2016
Сообщений: 277
02.07.2016, 13:46 38
Цитата Сообщение от Daniel5555 Посмотреть сообщение
можно ли еще быстрее
организуй свой цикл на ассемблере и сделай ассемблерную вставку в код
Цитата Сообщение от Daniel5555 Посмотреть сообщение
Уже давно сделал
и где решение?
https://www.cyberforum.ru/post9323828.html
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 31
02.07.2016, 13:48  [ТС] 39
На Ассемблере и вставить код - это я вряд ли пойму. Да я сразу делал изначально в StringGrid, а потом рассчеты делал в цикле и просто выводил в StringGrid изменения.
0
02.07.2016, 13:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2016, 13:48
Помогаю со студенческими работами здесь

Долгий старт
Здравствуйте, у меня 2 проблемы... Собрал комп: Мать GA_Z97M-D3H Процессор I5-4690 Оперативная...

Долгий макрос
Приветствую всех. Нудна идея на уменьшении времени выполнения цикла. Имеются два листа ( один и...

Getbykey долгий
Sub Postopen(Source As Notesuidocument) Dim workspace As New NotesUIWorkspace Dim uidoc As...

Долгий запрос
MSSQL-2008. Есть таблица в котором около 4 млн записей. В которой поле DateOper(тип datetime2(7))...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru