Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

Threads: можно ли из одного потока запустить и остановить другой   Найти похожие ветки 

 
mmb   (2002-08-05 11:18) [0]

Можно ли из Execute одного потока запустить или остановить другой поток, эффективно ли такое взаимодействие потоков?


 
Виктор Щербаков   (2002-08-05 11:22) [1]

Можно.
Зависит от задачи.


 
mmb   (2002-08-05 11:32) [2]

Первый поток читает данные, втокой отображает на экране (заведомо быстрее). Первый прочитав блок, запускает второй, а сам продолжает читать сл. блок, а второй отобразив останавливается. И так пока все блоки не считаны.


 
Виктор Щербаков   (2002-08-05 11:41) [3]

Отображать данные можно и в основном потоке, т.е. в потоке пользовательского итерфейса VCL.

Т.е. поток чтения данных может отправлять (PostMessage) сообщение о необходимости отображения очередного блока в одно из окон основного потока.

Но это всё общие слова. Возможны другие варианты.


 
ACR   (2002-08-05 11:48) [4]

У меня возникает другой вопрос как запустить поток НЕ ИЗ ДРУГОГО потока? Как остановить поток НЕ ИЗ ДРУГОГО потока?
переформулируй вопрос....


 
mmb   (2002-08-05 12:14) [5]

В основном потоке не хотельсь бы отображать данные, чтобы оператор мог просматривать те данные, которае уже отобразились.
Формулирую точнее: можно ли сделать так
procedure TThrRead.Execute;
begin
for i := 1 to nt do begin
TraceRead(i);
ThrDisplay.DisplayNum := i;
ThrDisplay.Resume;
end;
end;

Не возникнет ли ошибок?


 
Виктор Щербаков   (2002-08-05 12:25) [6]

Не совсем понятно, что же нужно!
Нужно чтобы пользователь видел уже прочитанные данные?
Тогда не понятно, почему не хочешь делать отображение в основном потоке (имеется ввиду поток пользовательского интерфейса VCL).
Ведь данные ты читаешь в другом потоке.

А из пиведенного тобой кода нельзя сделать вывод о его правильности/ошибочности, т.к. многое зависит от кода потока ThrDisplay. Ошибки чаще всего возникают из-за пренебрежения тем фактом, что почти все компоненты VCL не имеют средств для многопоточной работы. Приятное исключение - TCanvas с его методами Lock и Unlock.


 
mmb   (2002-08-05 13:09) [7]

В ThrDisplay как раз на TCanvas рисуются графики (обычно не менее 100). Оператор с помощью скролинга может видеть процесс в динамике. Если строить графики в основном потоке, то он будет сидеть перед замершим экраном. Это будет как в досе.


 
mmb   (2002-08-06 11:47) [8]

В ThrDisplay как раз на TCanvas рисуются графики (обычно не менее 100, часто гораздо больше несколько тысяч). Оператор с помощью скролинга может видеть процесс в динамике. Если строить графики в основном потоке, то он будет сидеть перед замершим экраном. Или я неправ?


 
ACR   (2002-08-06 12:11) [9]

>mmb

>то он будет сидеть перед замершим экраном. Это будет как в досе

хорошо сказал...
:-)

а даже если и в потоке канвас будешь локать всеравно получится "как в досе" :-)

зделай без потоков
примерно вот так

j = 0;
P = 10;


for(i=0;i<количество графиков;i++)
{
рисуем график(i);

j++;
if (j==P)
{
j=0; //суда мы будем попадать после каждого десятого графика... здесь вызываешь Repaint() того об"екта на котором ресуеш... еще можно(нужно?) вставит Application->ProcessMessage()
тогда можно реализовать кнопочку Cancel... чтобы все эти "репаинты" не тормозили дело то в зависимости от количество графиков можно увеличить или уменьшить P или даже дать пользователю самому настроить этот параметр... ИМХО очень хорошая методика... всебы так делали... а то бывает сидишь как в досе :-)



}



}








Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
1-60668
V.Turecky
2002-08-03 16:00
2002.08.19
TListView c графикой.


1-60733
bobr12
2002-08-07 10:12
2002.08.19
Как узнать имя компьютера на котором запущена программа?


1-60582
sova
2002-08-08 07:51
2002.08.19
кнопки


4-60912
mcs
2002-06-16 15:40
2002.08.19
очистить своп


6-60770
Sin
2002-06-04 13:55
2002.08.19
Собственны проси сервер





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