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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 05:38   #1
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
Вопрос Вопрос про синхронизацию в потоке

Вобщем есть две кнопки, кнопки Старт и Стоп и процедура thread.Execute. У меня все работает, но вопрос только в том правильно ли я все делаю и можно ли так делать, хочу что бы все корректно работало поэтому решил спросить у профи.

Для кнопки Старт пишу такой код, перед запуском потока нужно выключать кнопку Старт и включать кнопку Стоп, поэтому код для кнопки Старт у меня выглядит так:
Код:
Form1.Button1.Enabled:=False;
Form1.Button2.Enabled:=True;
// запуск потока
Для кнопки Стоп пишу такой код, останавливаем поток и включаем кнопку Старт и выключаем кнопку Стоп:
Код:
// остановка потока
Form1.Button2.Enabled:=False;
Form1.Button1.Enabled:=True;
дальше выполняется основной код прописанный в процедуре thread.Execute, так вот у меня есть цикл который после того как дойдет до указанного "лимита" должен оповещать что работа завершена и включать кнопку Старт и выключать кнопку Стоп, пример:
Код:
procedure thread.Execute;
// основной код
Form1.Button2.Enabled:=False;
Form1.Button1.Enabled:=True;
так вот вопрос, можно ли в thread.Execute включать и выключать кнопки Старт и Стоп? причем если в событии самой кнопки не выключать кнопки Старт и Стоп то программа зависает и до тех пор пока в thread.Execute не пропишу включение и выключение кнопок, программа не работает корректно и зависает, как только пропишу то все ок, и обязательно ли в thread.Execute синхронизировать кнопки Старт и Стоп или нет?
FleXik вне форума Ответить с цитированием
Старый 17.10.2013, 08:42   #2
avd
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 79
По умолчанию

Цитата:
можно ли в thread.Execute включать и выключать кнопки Старт и Стоп?
Methods and properties of objects in visual components can only be used in a method called using Synchronize". Т. е. обращение к визуальным компонентам возможно только путём вызова процедуры Synchronize.

Код:
procedure TThrd.Execute;
begin
  Synchronize(EnableButton);
end;
Код:
procedure TThrd.EnableButton;
begin
  Form1.Button1.Enabled:=True;
end;
Примерно как-то так.

Последний раз редактировалось Stilet; 17.10.2013 в 14:33.
avd вне форума Ответить с цитированием
Старый 17.10.2013, 08:48   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем вообще в потоке управлять доступностью кнопок?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.10.2013, 08:51   #4
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Зачем вообще в потоке управлять доступностью кнопок?
в потоке это в процедуре Execute? по другому не работает.

avd, как синхронизировать я знаю, спасибо, вопрос был в другом.

Аватар, жесть :D действительно в Execute не нужно было прописывать т.к я прописал выключение кнопок в кнопке Старт и Стоп

Последний раз редактировалось Stilet; 17.10.2013 в 14:33.
FleXik вне форума Ответить с цитированием
Старый 17.10.2013, 12:36   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Tag = 0 then
  begin
    Button1.Tag := 1;
    Button1.Caption := 'Стоп';

    Thread := TThread.Create(True);
    Thread.FreeOnTermonate := True;
    Thread.Resume;
  end
  else
  begin
    Button1.Tag := 0;
    Button1.Caption := 'Старт';

    Thread.Terminate;
  end;
end;
С одной кнопкой
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пару вопросов про синхронизацию\критическую секцию bakanaev Общие вопросы Delphi 8 14.03.2013 12:19
Вопрос про Свойство Visible и про иконки в imagelist Kappi4 Компоненты Delphi 2 21.05.2010 13:10
Вопрос про синхронизацию и статику Lemon2009 Общие вопросы по Java, Java SE, Kotlin 1 22.03.2010 22:01
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24