Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.006 c
3-1245124820
Sirus
2009-06-16 08:00
2010.09.19
UpdateSQL в несколько таблиц?


10-1168111829
nali
2007-01-06 22:30
2010.09.19
Ошибка при вызове com сервера...


11-1216304360
neccasalmor
2008-07-17 18:19
2010.09.19
как в компоненте montcalendar выделить интервал дней?


15-1277470736
12
2010-06-25 16:58
2010.09.19
Киньтесь ссылкой на архив иконок


15-1277560566
Typer
2010-06-26 17:56
2010.09.19
Как выделить все ветки созданные одним автором??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский