Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.02.2017
Сообщений: 55
1

Boost::thread std::thread

10.09.2019, 23:40. Просмотров 1036. Ответов 3
Метки нет (Все метки)

чем отличается boost::thread( ) от std::thread (с++17)?
я спрашиваю не о способе реализации потоков в целом, а конкретно о этих функциях.
Имеется код (не мой), который я использую в своем проекте, где создается поток с помощью бустов (в качестве аргумента передается ссылка на объект (или экземпляр, не знаю как правильно) класса
C++
1
boost::thread Thread( boost::ref( *MyClassName ) );
данный поток создается в отдельной функции, которая завершается раньше чем поток успеет выполнится, и все работает как нужно (поток выполняется параллельно с выполнением последующего кода)
но стоит мне использовать std::thread вместо boost
C++
1
std::thread Thread( std::ref( *MyClassName ) );
то программа падает на выполнении функции, в которой кроме создания данного потока ничего не происходит. такое ощущение что память выделенная под этот поток как бы стирается при завершении этой функции, если я подожду завершения потока
C++
1
2
std::thread Thread( std::ref( *MyClassName ) );
Thread.join( );
- то все проходит гладко, но следующий код программы в основном цикле не начнет выполнятся, пока не завершится поток, что лишает смысла использования потока.
вопрос в следующем: почему так происходит?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2019, 23:40
Ответы с готовыми решениями:

Boost::thread vs std::thread
Доброго времени суток, решил углубить свои знания, и решил почитать про потоки, бустовые и те что в...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list"
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в...

Использование std::function в std::thread
Нужно вызвать function fnc в новом потоке. Как сделать? function <void(vector<char>)> fnc; void...

std::thread
Возник вопрос: как создать массив потоков (точнее, как его инициализировать). То есть, мне нужно...

3
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
11.09.2019, 00:11 2
Лучший ответ Сообщение было отмечено lallollulz как решение

Решение

lallollulz, в STL если при вызове деструктора объекта связанный поток все еще работает, то программа аварийно завершается (вызывается std::terminate).

В boost поведение при вызове деструктора настраивается при помощи макросов: может вызываться либо std::terminate, либо detach.

В твоем случае я бы советовал явно делать Thread.detach() перед выходом из функции независимо от того boost это или STL.
2
0 / 0 / 0
Регистрация: 17.02.2017
Сообщений: 55
11.09.2019, 00:25  [ТС] 3
nonedark2008, спасибо так раз хотел это попробовать, но думаю создам-ка сначала темку)
ваш ответ помог, спасибо
0
4545 / 3055 / 1280
Регистрация: 07.05.2019
Сообщений: 9,418
Записей в блоге: 1
11.09.2019, 09:02 4
Цитата Сообщение от lallollulz Посмотреть сообщение
- то все проходит гладко, но следующий код программы в основном цикле не начнет выполнятся, пока не завершится поток, что лишает смысла использования потока.
вопрос в следующем: почему так происходит?
Потому что join() не сразу после запуска потока, а в точке, где тебе нужно точно знать, что поток завершился, в твоём случае - перед выходом из main (или что там у тебя).
И не используй detach() без необходимости.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2019, 09:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Указатели и std::thread
Всем здрасьте ! Возникла проблема в понимании ... Возможно я написал не в ту тему, но думаю тут...

Std::thread::detach()
Что произойдет, если main - поток завершится раньше чем child.detach()? Добавлено через 3 минуты...

Конструктор std::thread
Доброго времени суток, помогите, пожалуйста, понять, в чем ошибка? #include <functional>...

Многопоточность в C++11. std::thread
Привет всем! использую таким образом многопоточность class A { public: void fun() {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.