powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с памятью...
25 сообщений из 59, страница 2 из 3
Проблема с памятью...
    #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
25 сообщений из 59, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с памятью...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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