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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.016 c
3-2026
dimablind
2004-01-09 22:51
2004.02.02
quickreport и число записей


14-2337
ИдиотЪ
2003-12-22 08:50
2004.02.02
сколько вам лет


1-2097
scorpi
2004-01-20 08:26
2004.02.02
Версия программы


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


14-2313
Daemys
2004-01-13 09:22
2004.02.02
Пошлые они там