Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вывод из дочернего потока на форму значения [D2005, XP]


Страницы:   1 2

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. Для неблокирующей работы с ком-портами доп. потоки не нужны. Выкинь нафиг свой код и сделай по человечески.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо