Главная страница
    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.006 c
3-60543
NDR
2002-07-30 11:55
2002.08.19
УВАЖАЕМЫЕ МАСТЕРА ! ДВЕ БД НЕ РАБОТАЮТ СОВМЕСТНО =((


3-60480
DmitryS
2002-07-27 03:18
2002.08.19
Из-за чего возникает


3-60479
awaken
2002-07-28 18:45
2002.08.19
ADO Recordset и Delphi DataSet


3-60481
Naik
2002-07-29 06:37
2002.08.19
Ищу замену TTable


1-60559
eLVik
2002-08-07 14:12
2002.08.19
TImageList - динамическая загрузка





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