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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2014, 10:02   #1
Вадим Вергун
Пользователь
 
Регистрация: 01.11.2014
Сообщений: 52
Вопрос Медленно работает.

Работает крайне медленно подскажите почему.
Код:
uses ABCObjects,GraphABC;
const
m=100; //кол-во интераций
var x,y,i,x1,y1,r,r1:integer;
a:array[-100..2000,-100..2000] of color;
s: RectangleABC; 
begin
Window.Width:=600;
Window.Height:=600;
Window.Title:='Генерация карты';
Window.SetPos(1,1);
s := new RectangleABC(1,1,20,20,clMoneyGreen); 
for r := 1 to 600 do
for r1 := 1 to 600 do
case random(0,3) of
0..2:Setpixel(r1,r,clYellow);//заливка фона
3:Setpixel(r1,r,clSkyBlue);
end;
 for r := 1 to 300 do
  a[random(20,600),random(20,600)]:=clGreen;
for i := 1 to m do
for x := 1 to 600 do
for y := 1 to 600 do
if a[x,y]=clGreen 
then begin
x1:=x-Random(-1,1);
y1:=y-Random(-1,1);
s.Number :=i;// вывод нумера текущей интерации
case random(1,100) of
1..26: a[x1,y1]:=clGreen;
76..92:a[x1,y1]:=clblue;
93..98:a[x1,y1]:=clred;
99..100:begin
a[x1,y1]:=clMagenta;
a[x1-1,y1]:=clBrown;
a[x1,y1-1]:=clBrown;
a[x1-1,y1-1]:=clBrown;
a[x1+1,y1]:=clBrown;
a[x1,y1+1]:=clBrown;
a[x1+1,y1+1]:=clBrown;//занесение в массив
end;
end;
setpixel(x1,y1,a[x1,y1]);
setpixel(x1-1,y1,a[x1-1,y1]);
setpixel(x1,y1-1,a[x1,y1-1]);
setpixel(x1-1,y1-1,a[x1-1,y1-1]);
setpixel(x1+1,y1,a[x1+1,y1]);
setpixel(x1,y1+1,a[x1,y1+1]);
setpixel(x1+1,y1+1,a[x1+1,y1+1]); // вывод на экран
end;
end.
В принципе программа делает то что и должна, но делает это она крайне медленно, причём чем больше работает тем медлительнее. При этом компьютер сам по себе работает весьма быстро. Подскажите в чём проблема?
Буду весьма признателен если подскажите как сменить значок в углу окна графического модуля и сделать окно недвижимым и неизменяемым, там вроде как есть для этого какие-то функции только вот не помню какие.

Последний раз редактировалось Stilet; 24.12.2014 в 10:56.
Вадим Вергун вне форума Ответить с цитированием
Старый 24.12.2014, 10:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
setpixel
Это медленная операция.
Если рисуешь карту, то рисуй не по точкам.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2014, 18:13   #3
Вадим Вергун
Пользователь
 
Регистрация: 01.11.2014
Сообщений: 52
По умолчанию

я воспользовался структурой блокировки рисования, то есть на экране не рисует, только в буфере, ускорилось раз в 10, но для моих целей этого недостаточно. Кроме рисования по пикселям, очевидно, другого вариантов нет. При этом компьютер "не гудит" то есть процессор работает не на полную. Ситуация безвыходная?
Вадим Вергун вне форума Ответить с цитированием
Старый 24.12.2014, 18:48   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

тут есть про прямую работу с байтами - http://www.programmersforum.ru/showthread.php?t=269805
Smogg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Task Parallel Library работает медленно coNsept Общие вопросы .NET 0 17.09.2014 12:21
Почему так медленно работает цикл? zotox Общие вопросы C/C++ 3 09.01.2011 23:57
Сервер работает медленно kuzyakiev PHP 9 06.08.2010 14:36
Почему запрос работает медленно _SERGEYX_ БД в Delphi 1 24.10.2008 17:30
Почему ХОR работает медленно? Иллидан Помощь студентам 5 01.05.2008 14:51