Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2017, 19:05   #1
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию Вопрос по std::shared_ptr и std::thread

Проблема вот в чем. Есть программа с обменом сообщений по сети. Пишу клиет где прем данных осуществляю в другом потоке. Далее полученные данные отправляю в третий поток где с помощью std::queue и std::condition_variable_any передаю эти данные для дальнейшей обработки. Эта часть работает хорошо. Но стоит только нажать на завершение программы сразу выдается ошибка crtisvalidheappointer (block). Данные для передачи из второго потока в третий осуществляю с помощью std::shared_ptr.

Вопрос соответственно почему происходит не корректное завершение программы.

Последний раз редактировалось Shadowfirst; 12.09.2017 в 19:11.
Shadowfirst вне форума Ответить с цитированием
Старый 13.09.2017, 06:57   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Телепаты в отпуске..но, возможно, при завершении программы есть еще работающие/ожидающие потоки, а данных к ним нет...сделайте глобальный std::atomic<bool> и устанавливаейте его при закрытии главного окна (завершение), дальше join на все потоки.

А внутри потоков сделать проверку, и если флаг установлен - оканчиваемся (для кондишинал делается цикл с tryXXX, т.е. ждем 100мс, проверяем флаг, снова ждем ... или предикат там вроде можно - почитайте).
alexzk вне форума Ответить с цитированием
Старый 13.09.2017, 07:55   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

shared_ptr не является потокобезопасным, есть свои нюансы в работе из разных потоков.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает строка в коде: std::ofstream fs(name, std::ios::binary); egorsavenkov Помощь студентам 1 07.11.2016 12:45
std::cout уменьшает время выполнения программы. std::thread aako Visual C++ 0 13.11.2015 16:59
Создание тестовой нагрузки на сервер(std::thread, boost::asio) halcyon C/C++ Сетевое программирование 2 24.04.2015 11:23
Вопрос по std::vector Сtrl Общие вопросы C/C++ 8 21.10.2011 02:16
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38