![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вывод из дочернего потока на форму значения [D2005, XP]
npr2 © (2008-04-29 12:59:00)Только начинаю работать с потоками. Может и не по адресу обращаюсь.
Создала форму. Создала дочерний поток в котором читаю данные из сом-порта. Нужно после обработки этих данных, выложить в Edit.text значение этой переменной. Делаю так
type
TCommThread=class(TThread)
private
Stroka:string;
HFile:TextFile;
Procedure ShowStroka;
protected
Procedure Execute; override;
end;
var
Scale_Form: TScale_Form;
TT:TCommThread;
Это описание потока.
Запускаю поток при создании формы TT:=TCommThread.Create(False);
procedure TCommThread.Execute;
var
begin
...
stroka:=Separ_float(w1);
TT.Synchronize(ShowStroka);
...
end;
procedure TCommThread.ShowStroka;
begin
Scale_Form.Edit1.Text:=Stroka;
end;
При выводе переменной задача вылетает по ошибке Access Violation at address. Если пытаюсь выводить значение в заголовок окна, то вообще ничего не происходит.
Где я ошибаюсь?
sniknik (2008-04-29 13:43:00) [21]> procedure TCommThread.ShowStroka;
> begin
> Scale_Form.Edit1.Text:=Stroka;
> end;
procedure TCommThread.ShowStroka;
begin
if Assigned(Scale_Form) then
Scale_Form.Edit1.Text:= Stroka;
end;
Edit1 надеюсь не динамически созданный.
ANB (2008-04-29 13:41:00) [22]
> Запускаю поток при создании формы
npr2 (2008-04-29 13:32:00) [23]Это разные попытки после того, что никак уже не получалось. Проблема в чем-то другом, но не могу понять в чем именно.
Сергей М. (2008-04-29 13:26:00) [24]
> TT-Это уж разные вариации
Вот эта"вариация" как раз и способна вызвать такую искл.ситуацию.
Что ты как раз и наблюдаешь.
npr2 (2008-04-29 13:13:00) [25]ANB TT-Это уж разные вариации. А как по-человечески?
DrPass (2008-04-29 13:10:00) [26]
> При выводе переменной задача вылетает по ошибке Access Violation
> at address
Scale_Form в этот момент точно указывает на готовую созданную форму TScale_Form?
ANB (2008-04-29 13:03:00) [27]1. TT.Synchronize(ShowStroka);
- убрать TT, просто вот так :
Synchronize(ShowStroka);
Хотя ошибку по идее вызвать не должно, но все же.
2. Ошибка скорее всего таки в другом месте.
3. Для неблокирующей работы с ком-портами доп. потоки не нужны. Выкинь нафиг свой код и сделай по человечески.