Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.49 MB
Время: 0.014 c
15-1139905285
Думкин
2006-02-14 11:21
2006.03.12
Про Асю.


6-1129405704
Volf_555
2005-10-15 23:48
2006.03.12
Определение MAC-адреса УДАЛЁННОГО компьютера


4-1135118283
Delphi_is_cool
2005-12-21 01:38
2006.03.12
Как добавить строку


15-1140432193
Чапаев
2006-02-20 13:43
2006.03.12
Как хорошо было на сайте без флэша...


6-1132780992
PVasili
2005-11-24 00:23
2006.03.12
Как в XML хранить HTML?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский