Главная страница
    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.46 MB
Время: 0.012 c
3-1122653317
HepB
2005-07-29 20:08
2005.09.11
Способ для хранения массива в поле...


2-1123593226
DeepProg
2005-08-09 17:13
2005.09.11
ADOQuery.Open. SELECT


9-1116165397
!Trinix
2005-05-15 17:56
2005.09.11
Работа с моделями


9-1115981864
Ландграф Павел
2005-05-13 14:57
2005.09.11
Ищу девочек и мальчиков для рисования вставок на flash`е


1-1124352482
cvg
2005-08-18 12:08
2005.09.11
Ошибка при вызове DivMod





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