Вниз
Скачать: CL | DM;

Потоки и отображение   Найти похожие ветки 

← →
Andov   (2005-08-22 15:11) [0]

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


← →
КаПиБаРа ©   (2005-08-22 15:19) [1]

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


← →
Leonid Troyanovsky ©   (2005-08-22 15:27) [2]


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


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

--
Regards, LVT.


← →
andov   (2005-08-22 15:32) [3]

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


← →
Poirot ©   (2005-08-22 15:38) [4]

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


← →
TUser ©   (2005-08-22 15:48) [5]

> andov   (22.08.05 15:32) [3]

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


← →
andov   (2005-08-22 15:54) [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;


← →
Юрий Зотов ©   (2005-08-22 16:05) [7]

Попробуйте добавить 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 16:15) [8]

Не помогло


← →
TUser ©   (2005-08-22 16:37) [9]

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

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


← →
Leonid Troyanovsky ©   (2005-08-22 16:48) [10]

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


← →
Leonid Troyanovsky ©   (2005-08-22 16:51) [11]


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

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


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

--
Regards, LVT.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
6-1113580920
lock95
2005-04-15 20:02
2005.09.11
авторизация пользователя на сервере SMTP


3-1122909888
ArchValentin
2005-08-01 19:24
2005.09.11
Сохранение информации из DBGrid


3-1122904417
Ольга
2005-08-01 17:53
2005.09.11
Не выполняется запрос к VIEW


1-1124246472
anton_321
2005-08-17 06:41
2005.09.11
как выводить изображение в DBGrid.


1-1124351244
Domix
2005-08-18 11:47
2005.09.11
Динамическое создание форм из консоли




   Наверх