Форум: "Прочее";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизОбращение к 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c