Главная страница
    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.46 MB
Время: 0.011 c
14-1124180776
Esu
2005-08-16 12:26
2005.09.11
Во блин кратер отгрохали :)


1-1124200403
Deep
2005-08-16 17:53
2005.09.11
Акцес виолейшен в длл


1-1124262735
Петр
2005-08-17 11:12
2005.09.11
вопросы вместо текста


1-1124470769
Пантелеев Иван
2005-08-19 20:59
2005.09.11
Фокус приложения


1-1124779960
ChILP
2005-08-23 10:52
2005.09.11
rxStrUtils





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский