![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мастера, не могу правильно выйти из потока, делаю: [D5]
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, то выходить из метода.