0 / 0 / 0
Регистрация: 20.03.2019
Сообщений: 68

Проблема с release режимом

24.01.2022, 15:16. Показов 545. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить вопрос по поводу “странного” поведения Visual Studio 2019.
Я пишу прогу в которой данные передаются из main потока в уже работающий параллельный поток “thread” посредством очереди “queue”.

Этот участок кода с проблемой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//std::cout << "Очередь 3 = " << q.size() << std::endl;
while (1)
{
while (TRUE) {
if (!q.empty())
{
break;
}
}
std::lock_guard<std::mutex> locker(m);
std::string job = q.front();
q.pop();
reader.parse(job, root);
 
……………………………………………………………………
…………………………………………………………………....
}
Когда я компилирую прогу в режиме “Debug” программа проходит этот участок кода нормально крутится в бесконечном цикле пока в очереди не появится какое-то задание и как только появилась она по команде “break” выходит из замкнутого цикла и дальше идет расшифровка задания.

А когда компилирую программу в режиме “Release” то программа проскакивает полностью замкнутый цикл и сразу идёт на считывание данных из очереди Но поскольку там ничего нет Она натыкается на команду std::string job = q.front(); и выбивается ошибка что идёт нарушение прав доступа к памяти.
Я с этим сталкивается не первый раз один раз просто готовые примеры компилировал под “Debug” и “Release” и бывало что пример под “Debug” выбивает ошибку а под “ Release ” проходил нормально
или наоборот.
Не могли бы вы объяснить может что-то нужно настроить в Visual Studio 2019, в чём может быть причина такого поведения? Спасибо большое!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2022, 15:16
Ответы с готовыми решениями:

Проблема Release
Написал код в режиме отладки, затем пытаюсь собрать в релизе и вылазит целая куча ошибок. Как исправить?

проблема с release.
при запуске release выдаёт вот ето:

Проблема с Release в Visual C++
Проект нормально компилится и в Debug, и в Release. Debug работает нормально. При попытке запуска Release появляется сообщение Runtime...

4
2389 / 1910 / 762
Регистрация: 27.07.2012
Сообщений: 5,550
24.01.2022, 15:24
А зачем применять эти непонятные TRUE? Почему не использовать обычные true/false?
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
24.01.2022, 15:28
Цитата Сообщение от Bigthanks Посмотреть сообщение
в чём может быть причина такого поведения?
У меня подобным антивирус любит шалить. В моём случае любое действие антивируса мне сразу показывается, чего может не быть у вас и он втихую ограничил доступ у релизной сборки. Если у вас проблема была и раньше, следуя из слов - то вполне вероятно антивирус, ибо ломаться попеременно то дебаг, то релиз не могут. Проверьте настройки и логи антивируса и закиньте в исключения папку с вашим проектом\проектами, если логи говорят о работе антивируса с вашей программой

Добавлено через 1 минуту
Если дело не в антивирусе - тогда логи VS надо ковырять и смотреть что не так при сборке в релиз, тут уже не ко мне, ждите ответа от более продвинутых людей

Добавлено через 1 минуту
Цитата Сообщение от John Prick Посмотреть сообщение
А зачем применять эти непонятные TRUE?
Это уже не о вопросе поломки релизной версии))
0
2389 / 1910 / 762
Регистрация: 27.07.2012
Сообщений: 5,550
24.01.2022, 15:43
Цитата Сообщение от Laborant666 Посмотреть сообщение
Это уже не о вопросе поломки релизной версии))
Как раз таки очень даже может быть где-нибудь в глубинах включений
C++
1
2
3
4
5
#ifdef DEBUG
    #define TRUE 1
#else
    #define TRUE 0
#endif
Добавлено через 12 минут
Цитата Сообщение от Bigthanks Посмотреть сообщение
C++
1
2
3
4
5
while (TRUE) {
if (!q.empty())
{
break;
}
}
ну и в принципе, тут, на мой вкус, лучше и проще как-то так:
C++
1
2
while (q.empty())
    std::this_thread::yield();
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.01.2022, 16:00
Цитата Сообщение от Bigthanks Посмотреть сообщение
!q.empty()
UB: необходима синхронизация (мутекс)


C++
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
#include <chrono>
 
// ... bla bla bla
 
while (1)
{
    while (1) 
    {
        std::this_thread::sleep_for(
            std::chrono::milliseconds(10)
        );
        const std::lock_guard<std::mutex> 
            lock_empty(m);
        
        if (!q.empty())
            break;
    }
    
    std::string job;
    {
        std::lock_guard<std::mutex> 
            locker(m);
        job = std::move(q.front());
        q.pop();
    }
    reader.parse(job, root);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2022, 16:00
Помогаю со студенческими работами здесь

Проблема с Release в Visual C++
Проект нормально компилится и в Debug, и в Release, обе работают нормально, но на другом компе Release работать отказывается а Debug...

Проблема с запуском qwt:release
Всем привет! Вопрос следующий Написал небольшое приложение, использующее Qwt Цель приложения - построить некий аналог диаграмм...

проблема у клиента в release build - как подступиться к решению?
Здравствуйте, уважаемые! Моя прога вылетает у нескольких клиентов, я не могу вопроизвести баг. Вот, что мне прислали - как правильно...

проблема с графическим режимом
Слушайте помогите разобраться с графическим режимом. я еще ни разу не переходил в него но тут попытался это сделать. итог: нихрена не...

Проблема со спящим режимом на Пк
Суть проблемы такова, что когда компьютер переходит в спящий режим, далее для выхода со спящего режима прожимаю клавишу на клавиатуре, он с...


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

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

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru