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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2016, 12:09   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Как вызвать Synchronize в безликой процедуре?

Привет.

Есть процедура, которая ни за кем не закреплена. Как в ней вызвать метод Synchronize?

Код:
procedure Test;
begin
  Synchronize(Test2);
end;
Ибо в таком варианте выходит ошибка.
bilibian вне форума Ответить с цитированием
Старый 20.10.2016, 12:32   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Ибо в таком варианте выходит ошибка.
и какая же ошибка?

D7. то чем пользуется "обычный" Synchonize не забывая при этом заполнять.
Код:
class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord);
Цитата:
Как в ней вызвать метод Synchronize?
зачем?
Цитата:
Есть процедура, которая ни за кем не закреплена.
а кто ПОЛЬЗУЕТСЯ данной процедурой?
1. закрепить её за потоком.
2. дать ей параметр, в котором указывать кто её вызвал (sender: TMyThread) и далее пользоваться этими данными
sender.Synchonize(sender.Test2);

А теперь ТЕЛЕПАТИЯ.
Test2 ТОЖЕ не закреплена ни за кем?!!
В таком разе все выше сказанное НЕ ПОМОЖЕТ.

procedure; {ваша Тest2}
procedure of object; {требования к параметру Synchonize }
это две БОЛЬШИЕ разницы.

выход только один.
закрепить и Test1 и Test2 за потоком(-ами) и не мучаться.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.10.2016 в 12:35.
evg_m вне форума Ответить с цитированием
Старый 20.10.2016, 12:42   #3
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
а кто ПОЛЬЗУЕТСЯ данной процедурой?
Test1 и Test2 не закреплены ни за кем. Ими пользуются несколько потоков.

Цитата:
Сообщение от evg_m Посмотреть сообщение
закрепить и Test1 и Test2 за потоком(-ами) и не мучаться.
Да, но в таком случае для каждого потока придется делать копии этих процедур, а копировать один и тот же код не слишком разумно, разве нет?
bilibian вне форума Ответить с цитированием
Старый 20.10.2016, 12:48   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Да, но в таком случае для каждого потока придется делать копии этих процедур,
А наследование?

Код:
TmyBasisThread =class(TThread)
protected
  procedure Test1;
  procedure Test2;
...
end;

TworkThread1 =class(TMyBasisThread)
end;

TworkThread2 =class(TMyBasisThread)
end;

.........
на всякий случай http://programmersforum.ru/showthread.php?t=295305
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.10.2016 в 12:56.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зделать запрос в хранимой процедуре xatabich БД в Delphi 8 08.12.2014 08:08
как вызвать в процедуре OnClick другую процедуру OnClick ? ddiipp Компоненты Delphi 7 07.09.2013 16:07
Как сделать в процедуре Event? Pcrepair Общие вопросы Delphi 4 23.03.2013 15:00
как реализовать процедуру в процедуре? Аlex Помощь студентам 11 14.07.2008 10:14
как в процедуре объявить массив? kolduev Помощь студентам 7 18.02.2008 23:35