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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2015, 04:34   #1
SomeOneAndrey
Пользователь
 
Регистрация: 28.06.2014
Сообщений: 20
По умолчанию Beginthread процедура класса

Привет всем. Как вызвать в потоке процедуру класса?

Код:
  TMainForm = class(TForm)
  public
    Stopper: TSvcStopper;
Код:
  TSvcStopper = class
  public
    procedure Start;
Код:
BeginThread(nil, 0, @Stopper.Start, 0, 0, id);
Выдает ошибку:
Код:
[dcc32 Error] fMain.pas(65): E2036 Variable required
Это можно исправить создав процедуру вне формы и вызвав её
Код:
procedure StopperStartEx;
begin
  MainForm.Stopper.Start;
end;
Но есть ли другие, более "красивые" решения? Чтобы вызвать в той-же строчке
SomeOneAndrey вне форума Ответить с цитированием
Старый 02.11.2015, 07:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
BeginThread(nil, 0, @Stopper.Start, 0, 0, id);
А что TThread уже вышло из моды?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 08:52   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
TThread уже вышло из моды
Отож. А обьектную функцию низзя подсунуть в данном случае в качестве параметра, мешает её скрытый параметр
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2015, 11:02   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

в новых Делфях(работаю в основном в FMX) оч удобный есть класс для работы в потоке

Пример такого:
Код:
  TTask.Run(procedure
     begin
       // бла-бла-бла, тяжелый запросы к БД или еще чего
       TThread.Synchronize(TThread.CurrentThread, procedure
          begin
            // тут обновляем данные визуально например 
          end);
     end);
ZuBy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экономия памяти. Что лучше: метод класса или процедура с параметрами... или без разницы? 3D Hunter Общие вопросы Delphi 7 26.12.2011 23:23
BeginThread vsrmis Общие вопросы Delphi 3 02.08.2011 12:26
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11
beginthread, ошибка при вызове Dreanks Помощь студентам 2 28.10.2010 14:09
Переделка с TThread на Beginthread bulldog5293 Общие вопросы Delphi 2 23.09.2010 17:24