Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
8-1097993332
Ozone
2004-10-17 10:08
2005.01.30
3D MAX + Delphi


3-1102105323
korvin
2004-12-03 23:22
2005.01.30
Проблема с передачей параметров в хранимую процедуру


4-1102595459
serg128
2004-12-09 15:30
2005.01.30
Как на WinAPI переименовать файл?


9-1098115002
Dgt
2004-10-18 19:56
2005.01.30
Help!где скачать opengl 1.3 или выше


9-1098617715
.cpp
2004-10-24 15:35
2005.01.30
Вычислить положение откуда идёт выстрел




   Наверх