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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2013, 01:23   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Delphi работа с потоками

Всем доброго времени суток. Структура части моей программы

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    label1: Tlabel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
 UpdateThread=class(TThread)
  private
    count: Integer;
  protected
    procedure Execute;override;
    procedure Connection;
    procedure Updating;
 end;

...

procedure UpdateThread.Execute;
begin
  ...
  StartMyFunction();
  ...
end;
В новом юните прописана сама функция - StartMyFunction();
StartMyFunction - специально вынесена в отдельный юнит и находится не в самом потоке, т.к. запускается с различными параметрами несколько раз ... ( для экономия места и для того, чтобы код не дублировать несколько раз )

И вся проблема в том, что функция StartMyFunction ссылается на объекты формы Form1 -label1, Memo1, Memo2 и т.д.

И при изменении label1.caption происходит ошибка - текст в самом label1 становится жирным при обновлении.

Можно ли это как нибудь подправить ...
-Jack- вне форума Ответить с цитированием
Старый 12.09.2013, 01:30   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Можно. Вызывайте её в Synchronize.
Человек_Борща вне форума Ответить с цитированием
Старый 12.09.2013, 01:35   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Это да, но как я понимаю, вот, так скажем, поправку нужно произвести в структуре юнит с функцией StartMyFunction.

Но если вызывать функцию так

Код:
procedure UpdateThread.Execute;
begin
  ...
  Synchronize(StartMyFunction());
  ...
end;
То вся программа подвисает при выполнении этой функции
-Jack- вне форума Ответить с цитированием
Старый 12.09.2013, 01:43   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
То вся программа подвисает при выполнении этой функции
Значит функционал этой функции надо разделить на две части. Часть выполняющую основную работу и часть связанную с визуализацией. В Synchronize обернуть нужно будет только вторую часть.
northener вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками. crazygoldbullet Win Api 7 13.04.2013 18:27
Работа с потоками gagarin0 Помощь студентам 0 28.10.2010 22:12
Работа с потоками в Delphi TRIZER Общие вопросы Delphi 1 26.06.2010 10:02
Работа с потоками Яр|/||< (^_^) Общие вопросы Delphi 5 09.03.2010 08:23
Работа с потоками Нюська Общие вопросы Delphi 3 27.05.2009 00:52