Форум: "Начинающим";
Текущий архив: 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.6 MB
Время: 0.009 c