Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.19;
Скачать: CL | DM;

Вниз

Тормоза   Найти похожие ветки 

 
cyber-pilot   (2010-06-22 15:19) [40]

Ой, глючу. Вот этому равнозначен:


case svet of
 3: kletka3[i,y,5]:=kletka3[i,y,5]-1;
 4: kletka3[i,y,5]:=kletka3[i,y,5]-2;
 5: kletka3[i,y,5]:=kletka3[i,y,5]-3;
 6: kletka3[i,y,5]:=kletka3[i,y,5]-4;
 7: kletka3[i,y,5]:=kletka3[i,y,5]-4;
 >8: kletka3[i,y,5]:=kletka3[i,y,5]-5;
end;


 
Омлет ©   (2010-06-22 15:20) [41]

тихий ужас...

> cyber-pilot   (22.06.10 15:10) [38]
> вот этот код:
> равнозначен этому:
> if svet>=3 then kletka3[i,y,5]:=kletka3[i,y,5]-1;


Нет. Вот этому:
if svet >= 3 then dec(kletka3[i,y,5], min(svet, 8) - 2);


 
Омлет ©   (2010-06-22 15:21) [42]

> cyber-pilot   (22.06.10 15:19) [40]

Этому тем более не равнозначен ))


 
Омлет ©   (2010-06-22 15:22) [43]

> [42]

вру. невнимателен )


 
Омлет ©   (2010-06-22 15:24) [44]

А круче так:
dec(kletka3[i,y,5], max(2, min(svet, 8)) - 2);


 
cyber-pilot   (2010-06-22 15:28) [45]


> [44]

для svet = 7 не подходит, хотя скорее всего исходный алгоритм не корректный )


 
Askalot ©   (2010-06-22 15:30) [46]

Да там все что угодно можно написать ) ну вы и команды навыдумывали, я кроме if и for ничего не знаю )


 
Омлет ©   (2010-06-22 15:30) [47]

А, блин, мы оба неправы. Там же магические числа - 7 пропущено


 
Омлет ©   (2010-06-22 15:33) [48]

> Askalot ©   (22.06.10 15:30) [46]

Опиши лучше сам алгоритм расчета параметров.
По коду его понять трудно.


 
nobody   (2010-06-22 15:35) [49]

Установи профилировщик AQTime и потестируй под ним.
Он тебе покажет узкие места в программе, которые больше всего съедают ресурсов.


 
Askalot ©   (2010-06-22 15:53) [50]


> Омлет

kletka3[i,y,5] - это здоровье дерева
svet - это количество деревьев рядом
если svet>3 то здоровье дерева уменьшается на 1;
если svet>4 то здоровье дерева уменьшается еще на 1;
...
это для светолюбивого дерева, для тенелюбивого наоборот =)


 
Ascalot ©   (2010-06-22 18:43) [51]

>>Юрий Зотов ©   (22.06.10 13:22) [27]

3. Закончив порцию расчета, поток заполняет его результатами какую-то структуру и через PostMessage (только не SendMessage) посылает форме сообщение WM_USER+100, в нем чере WParam передает адрес этой структуры, а сам считает дальше.


Это еще почему это? Только ради уменьшения количества тормозов? Или по какой другой причине?

В общем-то, в [27] есть несколько спорных моментов. Где хранится структура? Кто ее создает? Кто уничтожает? Сколько должно быть таких структур, одна или несколько? Как прозводится управление доступом к этой структуре?


 
12 ©   (2010-06-22 19:13) [52]

> kletka3[i,y,5] - это здоровье дерева
> svet - это количество деревьев рядом
> если svet>3 то здоровье дерева уменьшается на 1;
> если svet>4 то здоровье дерева уменьшается еще на 1;
> ...
> это для светолюбивого дерева

где логика..


 
Askalot ©   (2010-06-22 20:19) [53]


> где логика..

Всмысле? Деревьям не хватает света и они умирают.


 
Юрий Зотов ©   (2010-06-22 20:28) [54]

> Ascalot ©   (22.06.10 18:43) [51]

>> только не SendMessage
> Это еще почему это? Только ради уменьшения количества тормозов?
>  Или по какой другой причине?

Чтобы вычислительный поток не ждал, пока главный поток все отрисует, а продолжал считать параллельно отрисовке. Но если время отрисовки незначительно по сравнению с временем счета, то можно использовать и SendMessage.

> В общем-то, в [27] есть несколько спорных моментов.

Может быть, все же не спорных, а непонятных?

> Где хранится структура? Кто ее создает? Кто уничтожает? Сколько
> должно быть таких структур, одна или несколько? Как прозводится
> управление доступом к этой структуре?

Чудесные вопросы. Но все они вызывают встречный вопрос (правда, лишь один): кто разрабатывает программу - Вы или я?

Если разработчик - Вы, то все эти вопросы Вы сами и должны решить. Тем более, что это вопросы не архитектуры а ее реализации (раз), что они элементарны (два), и что как именно Вы их решите - без разницы (три).

А если разработчик - я, то почему не озвучено ТЗ, сроки и сумма?


 
Askalot ©   (2010-06-22 20:36) [55]


> Юрий Зотов

Вы прочитайте внимательно ник, это не я писал а какой то шутник =) Я такие премудрости и спрашивать бы побоялся =) Мне и таймера хватает )


 
Юрий Зотов ©   (2010-06-22 21:03) [56]

> Askalot ©   (22.06.10 20:36) [55]

Действительно. Тогда вот Ваша программа (структуру передаваемых для отрисовки данных, методы CalculateData и DrawData допилите сами):

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

const
 Msg_DataReady = WM_USER + 101;

type
 PDataRecord = ^TDataRecord;
 TDataRecord = record // Допилить
   Int: integer;
 end;

 TMyThread = class(TThread)
 private
   FFormHandle: THandle;
   procedure CalculateData(PData: PDataRecord); // Допилить
 protected
   procedure Execute; override;
 public
   constructor Create(CreateSuspended: boolean; FormHandle: THandle);
 end;

 TForm1 = class(TForm)
   procedure FormDblClick(Sender: TObject);
 private
   FThread: TMyThread;
   procedure MsgDataReady(var Msg: TMessage); message Msg_DataReady;
   procedure DrawData(PData: PDataRecord); // Допилить
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

 { TMyThread }

procedure TMyThread.CalculateData(PData: PDataRecord);  // Допилить
begin
 PData^.Int := PData^.Int + 1;
 Sleep(3000) // Имитация длительных вычислений
end;

constructor TMyThread.Create(CreateSuspended: boolean; FormHandle: THandle);
begin
 FFormHandle := FormHandle;
 inherited Create(CreateSuspended)
end;

procedure TMyThread.Execute;
var
 DataRecord: TDataRecord;
begin
 DataRecord.Int := -1;
 while not Terminated do
 begin
   CalculateData(@DataRecord);
   SendMessage(FFormHandle, Msg_DataReady, Integer(Self), Integer(@DataRecord))
 end
end;

 { TForm1 }

procedure TForm1.DrawData(PData: PDataRecord); // Допилить
begin
 Caption := "Это число рассчитано вторым потоком: " + IntToStr(PData^.Int)
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
 if FThread = nil then
   FThread := TMyThread.Create(False, Handle)
end;

procedure TForm1.MsgDataReady(var Msg: TMessage);
begin
 DrawData(PDataRecord(Msg.LParam))
end;

end.


 
Омлет ©   (2010-06-22 23:03) [57]

> Askalot ©   (22.06.10 15:53) [50]

Нормально, ага. Чем больше света, тем быстрее дерево умрёт.


 
Askalot ©   (2010-06-22 23:49) [58]


> svet - это количество деревьев рядом

Т.е. это сколько деревьев загораживают свет =) Я долго не задумываюсь над названиями переменных =)


 
MsGuns ©   (2010-06-23 00:21) [59]

Посмотрел [20] сдуру..
Теперь спать не буду блин..
Я б таких програматоров в Воронеж, в глушь, в деревню, к теткам :)


 
KilkennyCat ©   (2010-06-23 00:27) [60]

вообще-то, это все очень схоже с алгоритмом "Жизнь", а его реализация доведена практически до совершенства, рекомендую изучить.


 
MsGuns ©   (2010-06-23 00:40) [61]

Меня в ступор ввело из ппрведенной статьи вот это :
procedure TMyThread.Execute;
begin
  {Если Вы хотите, чтобы процедура DoWork выполнялась лишь один раз - удалите цикл while}
  while not Terminated do
    Synchronize(DoWork);
end;

procedure TMyThread.DoWork;
begin
  {Здесь можно уже выполнять те задачи, которые должны быть исполнены процессом} end;
   

Или я уже совсем сплю, или тварисч реально не понимает что такое синхронизация и зачем она нужна


 
Askalot ©   (2010-06-23 00:45) [62]


> Посмотрел [20] сдуру..
> Теперь спать не буду блин..
> Я б таких програматоров в Воронеж, в глушь, в деревню, к
> теткам :)

А что такое, нормальный код, даже комментарии есть =)))


 
Askalot ©   (2010-06-23 00:50) [63]

Кстати, я подправил код, убрал кое-что лишнее и теперь почти не тормозит. Теперь тормоза начинаются только когда вся карта полностью заселяется деревьями, но они небольшие, жить можно )


 
Askalot ©   (2010-06-23 01:06) [64]

>>Askalot ©   (23.06.10 00:50) [63]
>>А что такое, нормальный код, даже комментарии есть


То есть, наличие комментариев является признаком "нормальности" кода?
То есть, если я с комментариями напишу ахинею, то ахинея вдруг станет нормальным кодом?


 
Askalot ©   (2010-06-23 01:27) [65]

Заколебали такие умники, я учился на курсах один год три года назад, конечно я не знаю многих команд, но даже с такими командами я могу сделать вполне нормальную программу.


 
Германн ©   (2010-06-23 01:46) [66]


> MsGuns ©   (23.06.10 00:40) [61]
>
> Меня в ступор ввело из ппрведенной статьи вот это :
> procedure TMyThread.Execute;
> begin
>   {Если Вы хотите, чтобы процедура DoWork выполнялась лишь
> один раз - удалите цикл while}
>   while not Terminated do
>     Synchronize(DoWork);
> end;
>
> procedure TMyThread.DoWork;
> begin
>   {Здесь можно уже выполнять те задачи, которые должны быть
> исполнены процессом} end;    
>
> Или я уже совсем сплю, или тварисч реально не понимает что
> такое синхронизация и зачем она нужна
>

Пить надо меньше.
Этот шаблон уже давно всеми освистывается.  Уже много лет. Но пока ОС не запрещает Копи_Пасте такие статьи плодятся. Даже не как кошки, а как крысы.


 
Германн ©   (2010-06-23 01:51) [67]


> Askalot ©   (23.06.10 01:27) [65]
>
> Заколебали такие умники, я учился на курсах один год три
> года назад, конечно я не знаю многих команд, но даже с такими
> командами я могу сделать вполне нормальную программу.
>

Ты сначала найди того, кто тебе за эту работу заплатит.
Ну если тебя зарплата не интересует, то пожалуйста. Делай всё что хочешь.


 
Anatoly Podgoretsky ©   (2010-06-23 08:49) [68]

> Askalot  (23.06.2010 01:27:05)  [65]

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


 
RWolf ©   (2010-06-23 09:19) [69]


> Askalot ©   (23.06.10 01:27) [65]

Автор, не принимай близко к сердцу, здесь это обычный стиль общения :)
Хотя код страшен, конечно.


 
Anatoly Podgoretsky ©   (2010-06-23 14:54) [70]

> MsGuns  (23.06.2010 00:21:59)  [59]

К телкам.



Страницы: 1 2 вся ветка

Текущий архив: 2010.09.19;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.011 c
2-1277122422
nobody
2010-06-21 16:13
2010.09.19
Выполнение запросов в потоке, с использованием DOA


15-1277584193
Юрий
2010-06-27 00:29
2010.09.19
С днем рождения ! 27 июня 2010 воскресенье


2-1277139245
Великий
2010-06-21 20:54
2010.09.19
Под вистой не отображается label


2-1277125693
LDV
2010-06-21 17:08
2010.09.19
проблема с anchor ами


15-1276780683
shaman
2010-06-17 17:18
2010.09.19
объектно-ориентированное програмирование