Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

потоки [D7, Win2k]


Arm79 ©   (2003-11-14 14:30:00) 

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

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, но ошибка не исчезла.

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


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

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


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

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


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


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


допустимо


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

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

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

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

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


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

2 erik

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


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


> Arm79


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


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

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


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

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


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

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


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

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

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


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

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


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

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


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

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

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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо