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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2010, 16:03   #1
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию Динамический массив процедур

Вобщем мне нужен динам. масив функций\процедур.
Вот код, который я юзаю:
Код:
  type
   TProc = procedure(i: Integer);

var
  Form1: TForm1;
  A : array of Tproc;
  i : integer;

procedure proc(i: integer);
begin
Form1.Memo1.Lines.Add(Inttostr(i));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(A , 10);
for i := 0 to Length(A) - 1 do begin
A[i] := proc;
Form1.Memo1.Lines.Add(Format('%p' , [Addr(A[i])]));
end;
for i := 0 to Length(A) - 1 do begin
A[i](i);
end;
end;

end.
Но каждой процедуре в массиве назначается одинаковый адрес, а мне надо, чтобы каждая процедура вызывалась из нового адреса памяти. Т.е. скопировать память процедуры 9 (в данном случае) раз.
Пытался юзать New(), не вышло. Помогите кодом, или хотя бы примером по теме с New().
ZaRDaK вне форума Ответить с цитированием
Старый 10.07.2010, 16:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а зачем копировать одно и тоже?
смысл сего?
и так есть параметр функции.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2010, 16:25   #3
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Мне нужно распределить нагрузку на пямять. Когда , допустим, 500 потоков вызывают функцию из одного участка памяти, это как по мне не хорошо.
ZaRDaK вне форума Ответить с цитированием
Старый 10.07.2010, 16:28   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это нормально вообще то.
так как в вашем случае лишь увеличится код.

если уж сильно надо, то пишите 10 процедур.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2010, 16:33   #5
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Ну, число 10 в коде - просто пример.
Это чтисло может вариироватся от 1 до 5000.
Так что фиксированное кол-во процедур не подойдёт, так как массив динамический.
И я всё-таки сомневаюсь, что это нормально.
ZaRDaK вне форума Ответить с цитированием
Старый 10.07.2010, 16:51   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
И я всё-таки сомневаюсь, что это нормально.
а дублировать код по тысячу раз это нормально?

как раз таки нормально что если процедура нужная то используется столько сколько надо.
ведь в ней же используется(с вашего примера) Memo.Lines.Add, давайте тоже растиражируем.
АПИ используется тоже по многу раз, тоже растиражируем, да?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2010, 17:25   #7
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Не в примере я работаю с сетью. Динамический массив из компонентов - тиражируется. Сокеты - тиражируются, с API я делать ничего не буду, так как оно расчитано на одновременный вызов несколькими процессами.
Я попрошу не критиковать моё решение.
ZaRDaK вне форума Ответить с цитированием
Старый 10.07.2010, 17:47   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тиражируются компоненты, но не методы, то есть данные но не код.
сокеты тоже данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2010, 17:52   #9
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Сокет - это обьект.
Возможно буду не точен с примером: UNIX'овые внутреОСевые сокеты, которые представляют собой файл.
>> Я попрошу не критиковать моё решение. Да, на весь этот флеймвар я отвечать скорее всего не буду
ZaRDaK вне форума Ответить с цитированием
Старый 10.07.2010, 18:56   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я вам ответил решение, либо изменение кода, что вам еще сложнее сделать будет.
Цитата:
Сокет - это обьект.
а обьект у нас не хранит данные?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив процедур - как? boris-blade Microsoft Office Word 1 21.02.2010 23:13
динамический массив!!!! zarinka0992 Помощь студентам 1 11.02.2010 09:06
Динамический массив Vito89 Помощь студентам 1 20.10.2009 01:55
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26
Массив процедур garik Общие вопросы Delphi 0 18.03.2009 21:08