Главная страница
    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.48 MB
Время: 0.018 c
15-1140174363
Keyser
2006-02-17 14:06
2006.03.12
Программная нсталяция Firebird


3-1137591605
Quantum
2006-01-18 16:40
2006.03.12
многопоточность и БД


15-1139893971
Думкин
2006-02-14 08:12
2006.03.12
Марсеру 20 лет.


15-1140406651
никак не получается
2006-02-20 06:37
2006.03.12
таблицы


1-1139405655
SiJack
2006-02-08 16:34
2006.03.12
аналог StrCopy для PWideChar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский