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

Вниз

потоки   Найти похожие ветки 

 
Arm79   (2003-11-14 14:30) [0]

Уважаемые знатоки, вопрос состоит в следующем. Как правильно использовать потоки? Пример, у меня есть поток, который переводит в верхний регистр ХТМЛ-теги. Правильнее будет каждый раз его создавать при изменении текста, а затем уничтожать, или создать один раз и потом замораживать и запускать его снова? Если правильнее второй вариант, то еще один доп. вопросик.

Form1onCreate
begin
Thread1:=TMyThread.Create(true);
Thread1.FreeonTerminate:=true;
end;

RichEdit1onChange
begin
if Key=">"
then Thread1.resume;
end;

TMyThread.Execute
begin
Syncronize(OutPut); // где OutPut - заменяет теги
end;

При такой организации первая замена проходит на ура, а при продолжениии редактирования выдает ошибку №6 - ошибка дескриптора потока. В окне отладчика Threads процесс после выполнения Stopped. Попробовал после синхронизации поставить Suspend, но ошибка не исчезла.

помогите, плиз!


 
Reindeer Moss Eater   (2003-11-14 15:14) [1]

Поток завершается когда происходит возврат из его Execute.


 
Arm79   (2003-11-14 15:21) [2]

2 Reindeer Moss Eater © (14.11.03 15:14) [1]
ну и что? он завершился, следовательно, должет быть уничтожен, а в отладчике Threads он есть.


 
Reindeer Moss Eater   (2003-11-14 15:23) [3]

ну и что? он завершился, следовательно, должет быть уничтожен, а в отладчике Threads он есть.

Значит тебе просто почудилось следующее:

а при продолжениии редактирования выдает ошибку №6 - ошибка дескриптора потока.


 
Arm79   (2003-11-14 15:28) [4]

Понятно, значит для непрерывного исполнения нужно использовать
repeat synchronize(..) until Terminated;
Но я так пробовал, программа отдавала все ресурсы этому потоку и не работала. Приоритет я не менял, все осталось по умолчанию.


 
Arm79   (2003-11-14 15:30) [5]

Допустимо ли использование метода suspend внутри execute?

Что-то вроде
repeat
Synchronize(...);
Self.Suspend;
until Terminated;


 
Reindeer Moss Eater   (2003-11-14 15:30) [6]

А зачем на каждый OnChange вызывать переколбашывание текста?


 
Arm79   (2003-11-14 15:33) [7]

только на ввод ">"


 
erik   (2003-11-14 15:43) [8]

Какой ужас, а ты знаеш что означает Synchronize? Видно что нетю Это означает, что твой код работает в основном потоке. И еще почитай про события и WaitForMultipleObjects.


 
Digitman   (2003-11-14 15:44) [9]


> Arm79


каково твое понимание "действа", происходящего в процессе, при вызове тобой метода Synchronize() ? Не у Кариха ли пример содрал бездумно ?


 
Reindeer Moss Eater   (2003-11-14 15:44) [10]

И в чем же ужас работы в контексте основного потока?


 
Arm79   (2003-11-14 15:47) [11]

2 erik

Я рад, что Вы знаете. Представьте себе, я тоже знаю, но потоками стал заниматься только пару дней назад и многого еще не умею использовать. Материалы тоже читаю, но из них не всегда можно сразу определить правильный путь. Лучший материал - это консультация практика.


 
Arm79   (2003-11-14 15:49) [12]

Нет, не у Кариха, сам "допер".

С Вашего разрешения, я повторюсь:

Допустимо ли использование метода suspend внутри execute?

Что-то вроде
repeat
Synchronize(...);
Self.Suspend;
until Terminated;


 
Digitman   (2003-11-14 15:59) [13]


> Допустимо ли использование метода suspend внутри execute?


допустимо


 
Arm79   (2003-11-14 16:00) [14]

Спасибо. Буду пробовать.


 
Fay   (2003-11-14 18:33) [15]

Здесь не нужны потоки. В некотором смысле их и нету, т.к. вне Synchronize нИчО не происходит.



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

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

Наверх





Память: 0.47 MB
Время: 0.01 c
14-2305
LOX
2004-01-11 09:00
2004.02.02
Cупер новость!!! про Билли


3-1959
KIR
2004-01-09 13:41
2004.02.02
Можно ли сложить строки в ХП IB


3-1999
PavelOKES
2004-01-08 10:46
2004.02.02
Список алиасов


14-2321
Teren
2004-01-09 00:15
2004.02.02
Любимые фильмы


7-2395
samacho
2003-11-13 12:09
2004.02.02
Win2k сервис печать





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