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

Вниз

Обращение к VCL-контролам из потока   Найти похожие ветки 

 
kaZaNoVa ©   (2006-02-18 22:30) [0]

Имеется поток  TThread -  можно ли из него напрямую делать что-то вроде
if form1.CheckBox15.Checked then
  - у меня такой вариант то работает, то нет, в чем может быть ошибка?


 
kaZaNoVa ©   (2006-02-18 22:33) [1]

о   Synchronize(SomeProc); конечно слышал, просто интересно, почему иногда код [0] работает напрямую а иногда нет .......


 
Джо ©   (2006-02-18 22:34) [2]

Крайне не желательно. Такие вызовы стандартно выполняют из метода трида, передавая его в Synchronize.


 
kaZaNoVa ©   (2006-02-18 22:37) [3]

а из "чистого" CreateThread - потока иногда вообще глючит.. :(


 
Джо ©   (2006-02-18 22:39) [4]

> [1] kaZaNoVa ©   (18.02.06 22:33)
> почему иногда код [0] работает напрямую а иногда нет .......

На все воля Аллаха потому что. Большинство классов из VCL непотокобезопасны.


 
jack128 ©   (2006-02-18 22:41) [5]

kaZaNoVa ©   (18.02.06 22:37) [3]
а из "чистого" CreateThread - потока иногда вообще глючит.. :(

так и должно быть.   Это менеджер памяти глючит.


 
kaZaNoVa ©   (2006-02-18 22:51) [6]

jack128 ©   (18.02.06 22:41) [5]
Это менеджер памяти глючит.

а как его можно "исправить" ?)

набросал тут пример простенький:
Procedure F;
Begin
Form1.Label1.Caption:="Test";   //всё работает
form1.Caption:="Test";        // НЕ работает - заголовок становится пусым
End;

procedure TForm1.Button1Click(Sender: TObject);
Var  i:cardinal;
begin
CreateThread(nil,0,@f,nil,i,i);
end;


 
kaZaNoVa ©   (2006-02-18 22:53) [7]

маленькое уточнение:

CreateThread(nil,0,@f,nil,0,i);


 
kaZaNoVa ©   (2006-02-18 23:03) [8]

обращение к заголовку формы и через TThread работает тока с юзанием Synchronize

procedure TTest1.SomeProc;
begin
Form1.Label1.Caption:="Test";   //всё работает
form1.Caption:="Test";        // заработало:)))
end;

procedure TTest1.Execute;
begin
Synchronize(SomeProc);
end;


имхо это баг ...


 
API   (2006-02-18 23:25) [9]

Имеется поток  TThread -  можно ли из него напрямую делать что-то вроде if form1.CheckBox15.Checked then   - у меня такой вариант то работает, то нет, в чем может быть ошибка?

о   Synchronize(SomeProc); конечно слышал, просто интересно, почему иногда код [0] работает напрямую а иногда нет .......

имхо это баг ...


У нас с женой один автомобиль на двоих. Мы с ней договорились созваниваться и решать, кто когда берет машину. Правда, делаем мы это не всегда. Просто интересно, иногда захожу в гараж - а машины нет, а иногда захожу - есть... Что это может быть?
Имхо, это жена виновата...


 
jack128 ©   (2006-02-18 23:30) [10]

kaZaNoVa ©   (18.02.06 22:51) [6]
а как его можно "исправить" ?)


IsMultithread + F1 .  Но глюки с VCL это не исправит.


 
_silver ©   (2006-02-18 23:42) [11]

kaZaNoVa ©   (18.02.06 23:03) [8]
ИМХО - нет.


 
kaZaNoVa ©   (2006-02-19 00:00) [12]

_silver ©   (18.02.06 23:42) [11]
а как обьяснить нестабильную работу?)


 
isasa ©   (2006-02-19 00:16) [13]

SendMessage(PostMessage) ?


 
isasa ©   (2006-02-19 00:28) [14]

Уточню.
Я пользую для передачи больших фрагментов
SendMessage(WndHndl, WM_COPYDATA, 0, longint(@wmData));

ловлю, соответственно
procedure WMCopyData(var wMsg : TWMCopyData); message WM_COPYDATA;

WndHndl - хендл окна, передаю через адрес (p) в поток.
function ThreadFunction(p : pointer) : longint; stdcall;


 
_silver ©   (2006-02-19 00:41) [15]

kaZaNoVa ©   (19.02.06 0:00) [12]
а как объяснить нестабильную работу?)


Легко объяснить.
Достаточно почитать хелп к delphi.


 
API   (2006-02-19 00:57) [16]

а как обьяснить нестабильную работу?)

Не понимаете того, что пытаетесь сделать.
Может, все же, книгу почитаете?


 
kaZaNoVa ©   (2006-02-19 01:19) [17]

API   (19.02.06 0:57) [16]
пытаючь найти глюки и понять отчего они


> Может, все же, книгу почитаете?

обязательно, ссылки привествуются


 
Eraser ©   (2006-02-19 01:20) [18]


> API   (19.02.06 00:57) [16]


> Может, все же, книгу почитаете?

Эт точно, касаемо связки потоков+Делфи хорошо у Тейксейры объяснено
http://www.podgoretsky.com/ftp/Docs/Delphi/D5/Delphi5vol1.pdf ~5 MB



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

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

Наверх




Память: 0.51 MB
Время: 0.045 c
2-1140688805
Wolferio
2006-02-23 13:00
2006.03.12
Rave Reports


15-1140431069
Ega23
2006-02-20 13:24
2006.03.12
Чукча - чум


2-1140431213
ForX
2006-02-20 13:26
2006.03.12
Редактирование запроса?


2-1140445949
Василь Быков
2006-02-20 17:32
2006.03.12
обновление в таблице ?


2-1140541541
Sower
2006-02-21 20:05
2006.03.12
Байты с битами