Главная страница
    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.011 c
14-2352
Soft
2004-01-09 00:44
2004.02.02
Ящик для идиотов. Защита против зомбирования.


1-2079
qwerty2
2004-01-20 12:13
2004.02.02
Пул COM объектов


4-2410
Doomin
2003-11-25 15:55
2004.02.02
Запус процесса от имени другого пользователя


1-2111
pashtet
2004-01-19 18:15
2004.02.02
TDBGRID!!!!!


7-2385
Дмитрий Дикун
2003-10-29 18:08
2004.02.02
Отключение клавиатуры в Notebook





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