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

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

Мастера, не могу правильно выйти из потока, делаю: [D5]


Страницы:   1 2

Yuraz ©   (2002-04-01 17:32:00) 

procedure TTestThread.Execute;
begin
FreeOnTerminate:=true; // как сказанно, для прекращения потока

.....код......

end;

В результате по выходу из программы или повторного использования программы пишется WinError, ошибка 1400
Что доделать? В хелпе больше ничего не нашёл по выходу :(


Yuraz   (2002-04-01 18:32:00) [21]

Не знаю, может слишком сокращённо, но суть в том, что после завершения процесса выполнения работы программы, сама программа не завершает работу, и работает дальше, т.е. цикл i не завершается.


procedure TTestThread.Execute;
begin
while not Terminated do //многопоточность

begin
for i:=1 to 1000000 do
begin
if Terminated then break;
Form1.memo2.add(случайный текст);
end;
end;

Form1.Memo2.Visible:=True;
flag1:=true; // разрешено печатать и в html
world_sort; // это отдельная проц. из др. модуля, сортировка memo2 по алфавиту

end;
end.


panov   (2002-04-01 18:15:00) [22]

приведи код Execute и основные моменты твоей процедуры.


Yuraz   (2002-04-01 17:56:00) [23]

Только сейчас увидел, у меня программа по завершению работы вычислений, не завершает свою работу, а без конца добавляет и добавляет (уже пустые ) ячейки в StringGrig, хотя всё считается быстро и не заметно что комп нагружен.

После совета panov, ошибка исчезла, но вот без конца работает :(


panov   (2002-04-01 17:55:00) [24]

>Yuraz © (01.04.02 17:50)
Нет, в другой процедуре не надо.
У потока есть еще метд WaitFor.
Обрати на него внимание.


Yuraz   (2002-04-01 17:50:00) [25]

begin
FreeOnTerminate:=true;
for i:=1 to 200000 do begin
if Terminated then Break;
....код....
//вызов др процедуры из похожего модуля с for как здесь
proc_world;
end;
end;

может в proc_world тоже надо FreeOnTerminate:=true;?


panov   (2002-04-01 17:47:00) [26]

Как правило, внутри Execute используется конструкция:

while notTerminated do
begin
//...
//твой код
ifTerminated thenBreak;
end;


Виктор Щербаков   (2002-04-01 17:36:00) [27]

Там где у тебя
.....код......,
нужно время от времени проверять свойство Terminated, и если оно True, то выходить из метода.


Страницы:   1 2

Наверх

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