powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с памятью...
59 сообщений из 59, показаны все 3 страниц
Проблема с памятью...
    #39161846
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема с памятью...

Очень нужна помощь!
Есть два потока, которые вместе "бьют" память:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
DWORD WINAPI mainThreadFunction(LPVOID lpParam){
	MainThread* mainThread = (MainThread*)lpParam;
	while(!mainThread->terminated)
	{
		mainThread->readQueue();
		Sleep(100);
	}

	return 0;
}

DWORD WINAPI slaveThreadFunction(LPVOID lpParam){
	SlaveThread* slaveThread = (SlaveThread*)lpParam;
	while(!slaveThread->terminated)
	{
		slaveThread->writeToQueue();
		Sleep(100);
	}

	return 0;
}

MainThread::MainThread()
{
	this->threadFunction = mainThreadFunction;
	this->functionArguments = this;
	this->mainQueue = new MessageQueue();
	this->CommonThread::startThread();
}

void MainThread::readQueue()
{
	size_t size;
	mainQueue->getSize(&size);
	while(size != 0)
	{
		CommonMessage* message = NULL;
		mainQueue->popMessage(&message);
		mainQueue->getSize(&size);
		delete message;
	}
}

SlaveThread::SlaveThread(MessageQueue* mainQueue)
{
	this->threadFunction = slaveThreadFunction;
	this->functionArguments = this;
	this->mainQueue = mainQueue;
	this->CommonThread::startThread();
}

void SlaveThread::writeToQueue()
{
	mainQueue->pushMessage(new CommonMessage(new LaunchReadingMessage(false)));
}



Такой код без потоков работает идеально:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	MessageQueue* myQ = new MessageQueue();
	while(true)
	{
		CommonMessage* message = new CommonMessage(new LaunchReadingMessage(false));
		myQ->pushMessage(message);
		message = NULL;
		myQ->popMessage(&message);
		delete message;
		//Sleep(100);
	}


Синхронизация в очереди есть:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
#include "stdafx.h"
#include "MessageQueue.h"

MessageQueue::MessageQueue()
{
	messageQueue = new queue<CommonMessage*>;
	InitializeCriticalSection(&criticalSection);
}

void MessageQueue::pushMessage(CommonMessage* message)
{
	EnterCriticalSection(&criticalSection);
	messageQueue->push(message);
	LeaveCriticalSection(&criticalSection);
}

CommonMessage* MessageQueue::popMessage(CommonMessage** message)
{
	EnterCriticalSection(&criticalSection);
	*message = messageQueue->front();
	messageQueue->pop();
	LeaveCriticalSection(&criticalSection);
	return *message;
}

size_t MessageQueue::getSize(size_t* size)
{
	EnterCriticalSection(&criticalSection);
	*size = messageQueue->size();
	LeaveCriticalSection(&criticalSection);
	return *size;
}

MessageQueue::~MessageQueue()
{
	while (messageQueue->size() != 0)
	{
		CommonMessage* tempMessage = NULL;
		tempMessage = popMessage(&tempMessage);
		delete tempMessage;
	}

	delete messageQueue;
	DeleteCriticalSection(&criticalSection);
}



Пожалуйста, объясните почему с потоками ничего не выходит..
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39162133
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975,

Так сложно сказать, по коду вроде бы всё ок, если я не пропустил чего.
Если расстреливается память, то можно поставить в отладчике прерывание по записи в этот участок памяти
и таким образом отловить, где эта запись происходит.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39162173
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему я пробовал. Но еще раз попробую и отпишусь.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39162395
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На три раза просмотрел - нет тут проблем. Возможно они в той части кода, которая отсутствует. Вынеси этот код в отдельный проект, добавь проверки и добейся повтора проблемы.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39162401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heisenbug
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163044
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а может быть такое что проблема в компиляторе? Я делал это в VS2003. Давал другому человеку - он у себя запускал в VS2010, как я понял и сказал, что ошибок вообще никаких нет, что все отлично работает
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163050
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, это и так уже у меня отдельный проект, для проверки как раз добавления и извлечения из очереди )
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163184
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975а может быть такое что проблема в компиляторе? Я делал это в VS2003. Давал другому человеку - он у себя запускал в VS2010, как я понял и сказал, что ошибок вообще никаких нет, что все отлично работает

Ты оптимизацию выключаешь, когда собираешь ?
Если нет, добейся, чтобы всё это не работало в релизной версии с отключенной оптимизацией и с собранной debug info.
Тогда можно будет отлаживаться.
А ещё лучше -- в дебажной версии.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163188
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, это и так уже у меня отдельный проект, для проверки как раз добавления и извлечения из очереди )

Так давай весь код сюда, может кто-то и посмотрит.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163766
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163768
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще кое-что забыл сказать. У меня VS2003 установлен на WinXP, которая в свою очередь на виртуалке. Может быть проблема в виртуалке?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163803
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Может быть проблема в виртуалке?
нет
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163831
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя простой пример просили, а там какой-то Stackwalker который не компилируется. MSVC 2015
Выкинул его, скомпилировалось, на консоли пусто, висит, что-то делает. Косяк как проявляется?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163845
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975,

для тестирования нужно побольше погонять, но главное - ты забыл указать, что компилировать с многопоточной CRT (/MT)
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163856
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CreateThread() замени на _beginthreadex()
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163956
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем все работает, только замечательно переполняется очередь (и ес-но память) и тогда уже вылетает.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39163976
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

я так понимаю менеджер памяти банально не знает что работает в мультипоточке?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164061
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl, Возможно проблема действительно в /MT. Сейчас проверю.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164063
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, _beginthreadex это ж просто вроде как обертка? Или какие-то преимущества дает?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164064
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, _beginthreadex это ж просто вроде как обертка? Или какие-то преимущества дает?
инициализирует рантайм С/С++ для данного потока.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164066
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, StackWalker работать не должен, его просто можно закомментировать
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164075
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, CreateThread примерно ведь то же самое и делает, только поток сразу запускает на выполнение. Или просто в C++ вырвиглазно смотрится? Мне просто нужно использовать обязательно стандарт C++98. Но че-то я _beginthreadex в нем не нашел.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164080
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl, Переполнение памяти из-за очереди тоже возможно. Но у меня как правило валилось еще до No_memory. Т.е. что-то типа использование уже освобожденной памяти...
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164084
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пример ошибки через некоторое время работы:
Heap corruption detected at 00330860
HEAP[TestQueue.exe]: HEAP: Free Heap block 330858 modified at 330868 after it was freed
Unhandled exception at 0x7c90120e in TestQueue.exe: User breakpoint.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164087
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, CreateThread примерно ведь то же самое и делает, только поток сразу запускает на выполнение. Или просто в C++ вырвиглазно смотрится? Мне просто нужно использовать обязательно стандарт C++98. Но че-то я _beginthreadex в нем не нашел.
CreateThread() в стандарте тоже нет. Стандарт C++98 вообще не имеет стандартных методов создания потока.
CreateThread() не инициализирует CRT. 8017066
Не уверен что тебе нужна эта инициализация, но хуже точно не будет.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164107
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Опять не сказал(извиняюсь), что WINAPI мне использовать как раз можно.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164124
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TCreateThread() не инициализирует CRT.
Не уверен что тебе нужна эта инициализация
Нужна. Именно из-за её отсутствия он и получает проблемы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164126
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, "beginthread/_beginthreadex отличаются от CreateThread только тем, что инициализируют внутрипотоковые переменные состояния CRT." Не совсем понял что это за внутрипотоковые переменные состояния. Можно пример?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164149
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, Опять не сказал(извиняюсь), что WINAPI мне использовать как раз можно.
Рихтера почитай .

Некоторые соображения по библиотеке С/С++...
Чтобы многопоточные программы, использующие библиотеку С/С++, работали корректно, требуется создать специальную структуру данных и связать ее с каждым потоком, из которого вызываются библиотечные функции Более того, они должны знать, что, когда Вы к ним обращаетесь, нужно просматривать этот блок данных в вызывающем потоке чтобы не повредить данные в каком-нибудь другом потоке

Так откуда же система знает, что при создании нового потока надо создать и этот блок данных3 Ответ очень прост не знает и знать не хочет Вся ответственность — исключительно на Вас Если Вы пользуетесь небезопасными в многопоточной среде функциями, то должны создавать потоки библиотечной функцией _beginhreadex, а не Windows-функцией CreateThread
Может CreateThread() вовсе ни при чем. Замени и проверь. Если глюк исчез, значит помогло.

ЗЫ Твоя прога без Stackwalker у меня скомпилировалась и работает уже полчаса. Твой TestQueue.exe вылетает.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164152
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это сделал?
Siemarglkir86975,

для тестирования нужно побольше погонять, но главное - ты забыл указать, что компилировать с многопоточной CRT (/MT)
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164157
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Сделал. Похоже тоже все работает отлично. Основное приложение отказалось компилиться, когда этот параметр выставил. (И как я вообще мог забыть про этот параметр... Сейчас смутно вспоминаю про него)
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164163
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ThreadsInteraction error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164173
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975unresolved external symbol __malloc_dbg
Почувствуй разницу между многопоточной CRT (/MT) и отладочной многопоточной CRT (/MTd).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164182
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Siemargl, Возможно проблема действительно в /MT. Сейчас проверю.

Блин, слона-то он и не заметил...
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164184
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, Почувствовал. Теперь и основное приложение работает без проблем. Только не понял тогда к чему режим /MT, раз без new и delete редко программу можно найти
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164187
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, Ну да примерно так. Каюсь.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164188
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, _beginthreadex это ж просто вроде как обертка? Или какие-то преимущества дает?

Вообще-то она даёт те преимущества, что С/С++ программа, использующая CRT и потоки, без неё не работает .
А с ней -- работает. Что естественно отражено в соотв. пунктах документации.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164190
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, CreateThread примерно ведь то же самое и делает, только поток сразу запускает на выполнение. Или просто в C++ вырвиглазно смотрится? Мне просто нужно использовать обязательно стандарт C++98. Но че-то я _beginthreadex в нем не нашел.

Потому что её там и не должно быть, это -- функция, специфичная для Microsoft C/C++ runtime library.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164191
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dima T, "beginthread/_beginthreadex отличаются от CreateThread только тем, что инициализируют внутрипотоковые переменные состояния CRT." Не совсем понял что это за внутрипотоковые переменные состояния. Можно пример?

http://www.cplusplus.com/reference/cstring/strtok/?kw=strtok
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164194
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Только не понял тогда к чему режим /MT, раз без new и delete редко
программу можно найти
Редко можно найти человека, эксплуатирующего отладочную сборку программы. А её
распространение вообще запрещено лицензией MS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164205
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, Т.е. я правильно понял, что нужно /MTd использовать только для конфигурации Debug, а для Release использовать только /MT. Что я собственно сейчас проверил и заметил, что в конфигурации Release с /MT VS не ругается на unresolved symbols
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164213
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, Не понял что Вы имели ввиду, указав на функцию strtok
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164293
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Dimitry Sibiryakov, Почувствовал. Теперь и основное приложение работает без проблем. Только не понял тогда к чему режим /MT, раз без new и delete редко программу можно найти
Когда то давно, еще до мамонтов MSVS2005, были однопоточные приложения, которые с однопоточной CRT работали на пару процентов быстрее.

Ты же выкопал где то более старую версию =)
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164295
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975MasterZiv, Не понял что Вы имели ввиду, указав на функцию strtok

Прочитай описание этой функции -- поймёшь...
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164299
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkir86975Только не понял тогда к чему режим /MT, раз без new и delete редко
программу можно найти
Редко можно найти человека, эксплуатирующего отладочную сборку программы.


Я, я этот человек, этот человек -- Я.
Вы бы знали, сколько это боли...

Dimitry SibiryakovА её распространение вообще запрещено лицензией MS.


А вот это я не знал... Это ж здорово, позволяет очень просто всем доказать, что таки нужно собирать приложение в релизе...
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164326
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, Как я понял, в многопоточном приложении может возникнуть проблема с определением следующего маркера при повторном вызове функции strtok. Которую может вызвать другой поток с другими параметрами. Т.е. позиция маркера будет являться разделяемым ресурсом. Верно? Т.е. _beginthreadex поможет этого избежать и будет использовать изолированные, так сказать, эти самые маркеры для каждого отдельного потока?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164626
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975MasterZiv, Как я понял, в многопоточном приложении может возникнуть проблема с определением следующего маркера при повторном вызове функции strtok. Которую может вызвать другой поток с другими параметрами. Т.е. позиция маркера будет являться разделяемым ресурсом. Верно? Т.е. _beginthreadex поможет этого избежать и будет использовать изолированные, так сказать, эти самые маркеры для каждого отдельного потока?

Нет, всё не так.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164627
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975MasterZiv, Как я понял, в многопоточном приложении может возникнуть проблема с определением следующего маркера при повторном вызове функции strtok. Которую может вызвать другой поток с другими параметрами. Т.е. позиция маркера будет являться разделяемым ресурсом. Верно? Т.е. _beginthreadex поможет этого избежать и будет использовать изолированные, так сказать, эти самые маркеры для каждого отдельного потока?

Библиотека CRT использует статические и глобальные переменные для своей работы.
Эти глобальные переменные хранятся в общей для всех памяти приложения.
Например, функция

char* setlocale (int category, const char* locale);

устанавливает значение локейла, которое будет в дальнейшем использоваться другими функциями.

Чтобы использовать эти статические и глобальные переменные, они должны быть проинициализированы.
Для этого приложение обязано каждый свой новый поток создавать только вызвая фукнцию

_beginthreadex

или в противном случае этом потоке не использовать функции CRT вообще.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164641
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ, я этот человек, этот человек -- Я.
Вы бы знали, сколько это боли...

Прямо крик отчаяния... Не думал забить болт на кодинг. Податься в ПМ-ы?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164676
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMasterZivЯ, я этот человек, этот человек -- Я.
Вы бы знали, сколько это боли...

Прямо крик отчаяния... Не думал забить болт на кодинг. Податься в ПМ-ы?

Да это давно уже было, все уже позади, все преодолено героически...
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39164827
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДа это давно уже было, все уже позади, все преодолено героически...
Ну дай бох... если чо - подайся в управдомы жабисты. Денег больше. Кодить легче.
А знания железа сетей и протоколов останутся твои. Никто как-бе не заберет
честно нажитое...

Хотя.. как у вас в Питере я не вкурсе. Может и не так.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39165090
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TРихтера почитай.

Прочитал эту главу, в принципе, понял о чем идет речь.


kir86975Как я понял, в многопоточном приложении может возникнуть проблема с определением следующего маркера при повторном вызове функции strtok. Которую может вызвать другой поток с другими параметрами. Т.е. позиция маркера будет являться разделяемым ресурсом. Верно? Т.е. _beginthreadex поможет этого избежать и будет использовать изолированные, так сказать, эти самые маркеры для каждого отдельного потока?

Здесь, как я понял, я тоже был не далек от истины. (Только не учел, что потоки вообще ничего про tiddata при использовании CreateThread не будут знать)

На сколько я знаю использование глобальных переменных это плохой стиль программирования. А если это еще и многопоточное приложение... В общем, как я понял, эти функции, которые используют tiddata, в принципе использовать нельзя. А _beginthreadex тащит за собой кузов выделений блоков tiddata, которые, возможно, никто и использовать не будет.

Хотя, наверное, прийдется использовать _beginthreadex из-за того что "ребята не поймут".
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39165092
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и напоследок, СПАСИБО всем огромное за вашу помощь.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39165288
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Хотя, наверное, прийдется использовать _beginthreadex из-за того что "ребята не поймут".

Тебе придётся использовать beginthreadex всегда, когда ты в создаваемом потоке будешь использовать
CRT. Его, конечно, можно не использовать, пожалуйста, это -- твой сознательный выбор.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39165728
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivТебе придётся использовать beginthreadex всегда, когда ты в создаваемом потоке будешь использовать
CRT.


Да, полностью с Вами согласен.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39167105
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У Вас память освобождается в одном потоке а удаляется в другом, отсюда похоже и ошибки.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39167171
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.OtujktdУ Вас память освобождается в одном потоке а удаляется в другом, отсюда похоже и ошибки.

Это как ? Может "выделяется в одном, а удаляется в другом"?
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39169028
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
Ну как то так :). По юности натыкался на аналогичные проблемы при многопоточной работе с контейнерами stl.
...
Рейтинг: 0 / 0
Проблема с памятью...
    #39169044
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.OtujktdMasterZiv,
Ну как то так :). По юности натыкался на аналогичные проблемы при многопоточной работе с контейнерами stl.Потому что они по определению не thread-safe
...
Рейтинг: 0 / 0
59 сообщений из 59, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с памятью...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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