Главная страница
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.027 c
6-2260
Andry
2003-11-28 18:28
2004.02.02
Как узнать ждет ли сервер


1-2133
chtr
2004-01-19 14:46
2004.02.02
Свойства формы как у диалога


3-1965
Bezsonov Yuri
2004-01-09 11:47
2004.02.02
Взываю к коллективному разуму Мастеров! Работаем в динамике.


1-2158
Vinter
2004-01-21 12:13
2004.02.02
как разом все настройки одной компоненты передать другой?


14-2316
Nikolay M.
2004-01-10 20:06
2004.02.02
Обработка новых пластиковых лыж - ?