Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Форма и Трэд   Найти похожие ветки 

 
dms_main ©   (2005-01-18 10:39) [0]

Уважаемые мастера! Помогите разобраться.
Есть самый обычный трэд:

VoidThread = class(TThread)
critical:TCriticalSection;
constructor create;
destructor free;
procedure execute ; override;
end;
.......
constructor VoidThread.create;
begin
  inherited create(true);
  critical:=TCriticalSection.Create;
  self.Resume;
end;

destructor voidthread.free;
begin
   inherited free;
end;
procedure voidthread.execute;
begin
  while not self.terminated do
      begin
       sleep(1000);
       critical.enter;
       if Form1.button1.enabled = false then
          form1.button1.text:="Blocked";
       critical.leave;
      end;
end;

Ситуация такая, что при нажатии на button1 ее свойство enabled:=false;
Трэд крутиться постоянно.
Но даже когда видно что кнопка заблокирована трэд определяет ее сво-во enabled как true.
Что делать?


 
Александр Иванов ©   (2005-01-18 10:40) [1]

Читать про синхронизацию.


 
Семен Сорокин ©   (2005-01-18 10:42) [2]


> if Form1.button1.enabled = false then
>           form1.button1.text:="Blocked";

synhronize + F1


> destructor free;

destructor Destroy; override;


 
Digitman ©   (2005-01-18 10:59) [3]

кр.того толку от твоей крит.секции как от козла молока

крит.секция, защищающая некие ресурсы, д.б. одна и та же для ВСЕХ трэдов, потенциально обращающихся к этим ресурсам.. у тебя же каждый трэд создает и пользует свою собственную крит.секцию


 
dms_main ©   (2005-01-18 11:01) [4]

Как править то?


 
Digitman ©   (2005-01-18 11:13) [5]


> Как править то?


что править ?


 
dms_main ©   (2005-01-18 11:14) [6]

Что бы работало как надо.....


 
Digitman ©   (2005-01-18 11:51) [7]

да тут не "править" - тут все переписывать с нуля нужно ..


 
dms_main ©   (2005-01-18 12:08) [8]

Все такие умные, а сказать как правильно сделать никто неможет :-(
Чего с чем синхронизировать то?


 
Александр Иванов ©   (2005-01-18 12:11) [9]

dms_main ©   (18.01.05 12:08) [8]
Чего с чем синхронизировать то?

Все есть в справке, лень почитать?


 
dms_main ©   (2005-01-18 12:16) [10]

Если писать self.Synchronize(form1.button1.click), то вызывается этот самый клик - кнопка нажимается - а мне нужно совсем не это......


 
Digitman ©   (2005-01-18 12:22) [11]


> а мне нужно совсем не это


а зачем же это пишешь , если "нужно совсем не это" ?

объяви в своем классе некое булево поле, которое будет принимать значение св-ва Enabled кнопки

объяви в своем классе некий ПРОЦЕДУРНЫЙ метод, который будет считывать у кнопки это св-во и записывать прочитанное значение в то самое поле

вызывай Synchronize(этот самый некий метод)

и то же самое - в отношении кнопки



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
14-1105456159
Petrovich_
2005-01-11 18:09
2005.01.30
C++


14-1103561190
Cerberus
2004-12-20 19:46
2005.01.30
Встерча в самаре


3-1104227534
NewComponent
2004-12-28 12:52
2005.01.30
Запрос на удаление - ругается


1-1106035263
Алексей34
2005-01-18 11:01
2005.01.30
TDBGrid и индекс выбранное строки


6-1100461402
dimm
2004-11-14 22:43
2005.01.30
сеть под MSDOS