Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: 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 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
2-1123532726
Александр1
2005-08-09 00:25
2005.09.11
ввод недопустимых символов


1-1124464980
Андрей Молчанов
2005-08-19 19:23
2005.09.11
свои иконки в ShellList


1-1123948940
ArtemESC
2005-08-13 20:02
2005.09.11
Быстрое удаление байта в TMemoryStream


14-1124100382
KilkennyCat
2005-08-15 14:06
2005.09.11
Нет ли у кого книги по работе с БД в Делфи в електронном виде?


14-1124218935
Defunct
2005-08-16 23:02
2005.09.11
"www.delphimaster.ru" и "delphimaster.ru"