Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
14-60798
Mister
2002-07-23 06:02
2002.08.19
Мат


1-60587
Andrei__
2002-08-08 05:19
2002.08.19
отображение других форм, кроме главного, в панели задач


14-60825
Shurik_sh
2002-07-24 13:53
2002.08.19
Подскажите, где я могу скачать дистрибутив Delphi?


1-60726
SinnerPro
2002-08-07 04:05
2002.08.19
Помогите с ListView!


6-60776
John Kayfolom
2002-06-04 18:48
2002.08.19
Количество переданных пакетов/байт через соединение