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

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

Потоки и отображение [D7, Win2k, WinXP]


Andov ©   (2005-08-22 15:11:00) 

Из носновного потока создал новый (наследовал класс TThread). В новом потоке веду рассчет и пытаюсь затолкать данныхе в любой компонент на форму основного потока.
В новом потоке, если остановить программу свойства устанавливаются в новые значение, а в основном нет
Как сделать, чтобы из нового потока пожно было обновлять визуальные компоненты на форме?


Leonid Troyanovsky   (2005-08-22 16:51:00) [1]


> TUser ©   (22.08.05 16:37) [9]

> В догонку - в тело Execute() полезно вставлять sleep(0)
> чтобы дать время другим потокам, в т.ч. и основному. Если


Если б было написано, как положено, в Sleep нет
никакой нужды. Тем более 0.

--
Regards, LVT.


Leonid Troyanovsky   (2005-08-22 16:48:00) [2]

Удалено модератором


TUser   (2005-08-22 16:37:00) [3]

А что там на месте ...? Это я к тому, что синхронизировать какие-то длительные действия бессмысленно, а надо только само ображение к VCL-объектам. А если там что-то длинноработающее - то будет просто 'подвисание'.

В догонку - в тело Execute() полезно вставлять sleep(0) чтобы дать время другим потокам, в т.ч. и основному. Если этого не сделать - то опять же может произойти тот эффект, который вы описали.


Andov   (2005-08-22 16:15:00) [4]

Не помогло


Юрий Зотов   (2005-08-22 16:05:00) [5]

Попробуйте добавить 1 строку:

procedure TReadThread.Visualization;
begin
 with FormMain do
 begin
   s := ToStr(vl[0], 1);
   ledtRh.Text := s;
   ...
    Application.ProcessMessages;
 end;
end;


andov   (2005-08-22 15:54:00) [6]

procedure TReadThread.Visualization;
begin
     with FormMain do
     begin
         s := ToStr(vl[0], 1);
         ledtRh.Text := s;
         ...
     end;
end;
procedure TReadThread.Execute;
begin
 while Run do
 begin
   ...
       Synchronize(Visualization);
   ...
 end;
end;


TUser   (2005-08-22 15:48:00) [7]

> andov   (22.08.05 15:32) [3]

Покажи, как использовал


Poirot   (2005-08-22 15:38:00) [8]

Видимо не так делал... Должно помочь,


andov   (2005-08-22 15:32:00) [9]

использовал Sinhronize и SendMessage с WM_Paint не помогло


Leonid Troyanovsky   (2005-08-22 15:27:00) [10]


> КаПиБаРа ©   (22.08.05 15:19) [1]
> Либо используя Sinhronize, либо посылая сообщения основному
> потоку.


Либо Synchronize либо SendMessage окну.
Иначе несопоставимо.

--
Regards, LVT.


КаПиБаРа   (2005-08-22 15:19:00) [11]

Либо используя Sinhronize, либо посылая сообщения основному потоку.


Наверх

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