Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизПотоки и отображение Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c