powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi thread не становится nil после Terminate и выхода из цикла Execute
7 сообщений из 7, страница 1 из 1
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958897
evgen29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Чего-то я затупил. В Дельфе 7 создаю тип и переменную потока:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
type
  TLecSendRestThread = class(TThread)
  private
    procedure MainProc;
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  LecSendRestThread: TLecSendRestThread;



делаю вызов потока:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  if LecSendRestThread = nil then
  begin
    LecSendRestThread := TLecSendRestThread.Create(True);
    LecSendRestThread.FreeOnTerminate := True;
    LecSendRestThread.Priority := tpIdle;
  end;
  LecSendRestThread.Resume;



после того как после вызова Terminate потока заканчивается цикл:
Код: pascal
1.
2.
3.
4.
  while not Terminated do
  begin
    Synchronize(MainProc);
  end;



переменная потока LecSendRestThread не становится равной nil. Хотя я явно указал перед запуском LecSendRestThread.FreeOnTerminate := True;
Подскажите, где я чего упустил из виду.
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958900
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основы языка и устройство компьютера. Освобождение динамической памяти не означает
автоматического обнуления всех указателей на неё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958910
evgen29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

спасибо. Уже прочитал, что после удаления потока надо сделать LecSendRestThread:=nil; , чтобы убрать указатель в никуда. Хотя странно, что это не делается автоматически самим классом.
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958921
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen29
переменная потока LecSendRestThread не становится равной nil.
Так и должно быть.
А
Код: pascal
1.
Synchronize(MainProc);

говорит о том, что тред вам не нужен: MainProc выполняется в главном потоке.
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958922
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen29
Хотя странно, что это не делается автоматически самим классом.

Код: pascal
1.
2.
3.
LecSendRestThread := TLecSendRestThread.Create(True);
myThread := LecSendRestThread;
ObjList.Add(LecSendRestThread);

Что будем обнулять?
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958947
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen29
переменная потока LecSendRestThread не становится равной nil. Хотя я явно указал перед запуском LecSendRestThread.FreeOnTerminate := True;

А когда уничтожение объекта(Free) самостоятельно обнуляло(NIL) указатель(переменная) на объект ?
...
Рейтинг: 0 / 0
Delphi thread не становится nil после Terminate и выхода из цикла Execute
    #39958960
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen29
Код: pascal
1.
2.
3.
4.
while not Terminated do
  begin
    Synchronize(MainProc);
  end;


В чем сакральный смысл отдельного потока?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi thread не становится nil после Terminate и выхода из цикла Execute
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]