![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки и отображение [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, либо посылая сообщения основному потоку.