Форум: "Система";
Текущий архив: 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