|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.09.2017, 19:05 | #1 |
Пользователь
Регистрация: 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. |
13.09.2017, 06:57 | #2 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Телепаты в отпуске..но, возможно, при завершении программы есть еще работающие/ожидающие потоки, а данных к ним нет...сделайте глобальный std::atomic<bool> и устанавливаейте его при закрытии главного окна (завершение), дальше join на все потоки.
А внутри потоков сделать проверку, и если флаг установлен - оканчиваемся (для кондишинал делается цикл с tryXXX, т.е. ждем 100мс, проверяем флаг, снова ждем ... или предикат там вроде можно - почитайте). |
13.09.2017, 07:55 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
shared_ptr не является потокобезопасным, есть свои нюансы в работе из разных потоков.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что означает строка в коде: 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 |