Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.011 c
14-1124258736
Игорь Шевченко
2005-08-17 10:05
2005.09.11
Священная война :)


14-1124171482
Jamik
2005-08-16 09:51
2005.09.11
Аналитика по торговлю


14-1124348891
vidiv
2005-08-18 11:08
2005.09.11
Самая популярная в мире игра!


8-1114722560
Alpine
2005-04-29 01:09
2005.09.11
Помогите плизз с картинками !


10-1101741608
Romano
2004-11-29 18:20
2005.09.11
Передача структур (record) в методы COM-объектов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский