Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Meferov
0 / 0 / 0
Регистрация: 24.08.2012
Сообщений: 11
#1

Освобождение памяти - C++

24.08.2012, 19:17. Просмотров 2118. Ответов 20
Метки нет (Все метки)

Есть многопоточное приложение.
Создается глобальная структура:
Пример из msdn.
Код
typedef struct _MyData {
	int val1;
	TStringList* strlist;
} MYDATA, *PMYDATA;
Тут мы создаем помимо простых членов структуры - указатель на TStringList.

В функции, где собственно создаем сам поток, выделяем память, а указатель из структуры и будет указателем на эту выделяемую память.
Переменная типа структуры:
Код
PMYDATA pData;
Выделение памяти
Код
pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
Код
pData->strlist = new TStringList;
pData->strlist->Text = Memo1->Text; //просто присваиваем данные
И создание потока, где pData передается как входящие данные.
Использовать WaitForMultipleObject не хочу.

Если в потоке вызвать
HeapFree(GetProcessHeap(), 0, pData);
Память освободим?
Как правильнее освободить память?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освобождение памяти (C++):

резервирование памяти/освобождение памяти для трехмерного массива - C++
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Освобождение памяти - C++
#include<iostream> #include<cstring> using namespace std; struct stringy{ char * str; int ct; }; stringy & set(stringy &...

Освобождение памяти - C++
Добрый день. Пишу в рубрику "Вопросы начинающих по С/С++" посему вопрос глупый :) И все же, есть такой код //offset - массив...

Освобождение памяти в c++ - C++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что если освободить память, то переменная удаляется, но почему же...

Освобождение памяти - C++
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и деструктор класса image_bmp? class image { public:...

Освобождение памяти - C++
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete освобождаю память, но у меня вылетает ошибка...

20
Meferov
0 / 0 / 0
Регистрация: 24.08.2012
Сообщений: 11
27.08.2012, 23:17  [ТС] #16
Цитата Сообщение от Avazart Посмотреть сообщение
А как без него ?
Т.е. вы хотите завершить основной поток раньше вторичных и убив формы ?
Нет.
Еще один вопрос на счет потоков.
Использую Rad studio 2010. Создание потоков организовано через CreateThread(...);
Вывод информации на главную форму через критическии секции.
Слышал на счет проблемы "EInvalidOperation: Canvas does not aloow drawing". При использовании крит. секций в билдере такие ошибки возможны?
Что лучше использовать: крит. секции или Synchronize()?
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,046
Записей в блоге: 17
27.08.2012, 23:22 #17
Нет.
А как тогда ?

Synchronize() - это метод класса TThread, и к CreateThread(...) неимеет никакого отношения;

Слышал на счет проблемы "EInvalidOperation: Canvas does not aloow drawing". При использовании крит. секций в билдере такие ошибки возможны?
С Canvas еще не работал, но знаю что у неё есть свои методы обеспечивающие блокировку канвы.
0
Meferov
0 / 0 / 0
Регистрация: 24.08.2012
Сообщений: 11
27.08.2012, 23:31  [ТС] #18
Цитата Сообщение от Avazart Посмотреть сообщение
С Canvas еще не работал, но знаю что у неё есть свои методы обеспечивающие блокировку канвы.
Сама канва в коде вообще не присутствует.
При прогоне большого количества потоков, иногда появляется такая ошибка в окне отладчика.


Цитата Сообщение от Avazart Посмотреть сообщение
А как тогда ?
Synchronize() - это метод класса TThread, и к CreateThread(...) неимеет никакого отношения;
Если использовать WaitForMultipleObject, как его использовать так, чтоб не повесить форму?
В цикле с небольшим delay?
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,046
Записей в блоге: 17
27.08.2012, 23:36 #19
Ну если у тебя приложение с формами тогда тебе не нужен WaitForMultipleObject().

И если нужно что-то выводить из потоков в компоненты на форме то лучше использовать класс TThread вместо WinApi - потока

Тебе нужно знать когда потоки завершаться ?
0
Meferov
0 / 0 / 0
Регистрация: 24.08.2012
Сообщений: 11
27.08.2012, 23:57  [ТС] #20
Цитата Сообщение от Avazart Посмотреть сообщение
Тебе нужно знать когда потоки завершаться ?
Да. Подскажешь?
Событие OnTerminate?

Цитата Сообщение от Avazart Посмотреть сообщение
класс TThread
File | New | Other | Thread Object подключаем, создаем указатель и работаем. Bесь код потока засовываем в TThread::Execute(). Вывод на форму через Synchronize(func);, где func - ф-ция в которой код работы с формой.
Ведь так?
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,046
Записей в блоге: 17
28.08.2012, 00:00 #21
Проверяй MyThread1->Finished

Добавлено через 48 секунд
Цитата Сообщение от Meferov Посмотреть сообщение
File | New | Other | Thread Object подключаем, создаем указатель и работаем. Bесь код потока засовываем в TThread::Execute(). Вывод на форму через Synchronize(func);, где func - ф-ция в которой код работы с формой.
Ведь так?
Ну да...
0
28.08.2012, 00:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2012, 00:00
Привет! Вот еще темы с ответами:

Освобождение памяти - C++
Товарищи,недавно баловался в Microsoft VS,готовился к экзаменам,писал небольшие програмки с использованием динамических массивов.Память под...

Освобождение памяти - C++
Собственно есть простенький класс class Human { public: Human ( ); void ptintHuman(); private: static long...

Освобождение памяти - C++
Добрый день. Подскажите пожалуйста, почему возникает ошибка при уничтожение массива class MyClass { public: int *data; int...

Освобождение памяти в C++ - C++
Добрый день! В моей программе в функции выделяется память (new char) под символьный массив, который является элементом структуры. Это...


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

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

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