3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 23
1

Поток освобождается, но переменная, которой был присвоен этот поток, не очищается

07.08.2014, 14:07. Показов 1423. Ответов 6
Метки нет (Все метки)

Мне интересно, вот поток отработал, стоит FreeOnTerminate:=True; Поток освобождается, но переменной которой было присвоен этот поток, не освобождается от пойнтера. У меня конечно есть вариант посылать сообщение главному потоку через PostMsg, но может есть еще какие варианты, не использовать же таймер для проверки
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2014, 14:07
Ответы с готовыми решениями:

Разработать программу, в которой основной поток, принимает поток ввода и контролирует созданные потоки.
что-то не-то с кодом. 2 дня ломаю голову :( //#define _REENTRANT #include <stdio.h> #include...

Не очищается поток ввода
Ребят,у меня не очищается поток ввода,и не вводится фамилия студента(сразу перескакивает на группу...

Не очищается поток после cin.clear()
Собственно есть программа записывающая данные в файл и считывающая их оттудова со всеми...

Глобальная переменная и поток
Здравствуйте. Пишу сниффер. В переменной isWorking хранится состояние сниффера - работает он или...

6
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,852
07.08.2014, 14:11 2
Переменные содержащие ссылки на экземпляры любых классов в т.ч. потоков можно очистить только ручками. Других вариантов нет и быть не может в принципе.
0
Житель Земли
2908 / 2853 / 384
Регистрация: 26.07.2011
Сообщений: 11,124
Записей в блоге: 1
07.08.2014, 17:01 3
Цитата Сообщение от i386 Посмотреть сообщение
У меня конечно есть вариант посылать сообщение главному потоку через PostMsg
главный поток узнает о завершении работы доп.потока при обработке его события OnTerminate. мне кажется, об этом в любом уроке пишут
0
2648 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,725
07.08.2014, 23:33 4
Цитата Сообщение от i386 Посмотреть сообщение
переменной..не освобождается от пойнтера
А зачем вообще понадобилась эта переменная, если FreeOnTerminate:=True ?
0
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 23
08.08.2014, 19:55  [ТС] 5
Цитата Сообщение от mss Посмотреть сообщение
А зачем вообще понадобилась эта переменная, если FreeOnTerminate:=True ?
А зачем вообще используется переменная? Для этого и есть...
0
Пишу на Delphi...иногда
1419 / 1276 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
08.08.2014, 20:21 6
Цитата Сообщение от i386 Посмотреть сообщение
А зачем вообще используется переменная?
действительно, зачем?

Цитата Сообщение от i386 Посмотреть сообщение
Поток освобождается, но переменной которой было присвоен этот поток, не освобождается
переменная типа TObject (TThread тоже оттуда, все оттуда) является по своей сути указателем на память, где содержится экземпляр класса, при разрушении экземпляра память освобождается, но переменная все равно имеет значение, только указывающее уже на "неправильную" память (см. различие Free и FreeAndNil)
в вашем случае, как уже указывали тов. DenNik и mss переменная как указатель на экземпляр класса вообще не нужна:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
with TMyThread.Create(true) do
begin
   FreeOnTerminate := true;
   OnTerminate := MyTerminateThreadProc;
   Resume;
end;
 
procedure TMyForm.MyTerminateThreadProc(Sender: TObject);
begin
// в Sender поток, который закончил работу
   MessageBox(Handle, 'Поток закончил работу','', MB_OK);
end;
0
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,852
09.08.2014, 02:21 7
Цитата Сообщение от i386 Посмотреть сообщение
А зачем вообще используется переменная? Для этого и есть...
Глупый ответ.
Или это вопрос троешника? Тогда читай учебники.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2014, 02:21

Поток был недоступен для чтения
Здравствуйте. Что то пошло не так: HttpWebRequest wr =...

Создал поток. В нем выделил буффер. Поток выполнился, но из за буфера ругнулся.
В функции треда создал буфер char tbuf;но после того как тред выполнился выскочила ошибка...

Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA
Значит модуль в нем классы.Я создаю свое гуи.Так вот при вызове процедуры котрая копирует текст(в...

OpenFileDialog и потоки: Текущий поток должен быть задан как поток однопоточного контейнера (STA)
Со стартового окна запускаю формы вот так: new Thread(() => { ...

Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))
Помогите пожалуйсмта))))) Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый...

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.