|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||||||
Универсальная передача аргументов в потоках boost::thread07.10.2017, 23:58. Показов 2031. Ответов 6
Метки нет (Все метки)
Пишу обертку для потока и не могу организовать универсальную передачу аргументов, чтоб когда надо передовался по ссылке, а когда надо по значению. С stl потоками работает, если делать как сказано тут
а с бустом не хочет. Может кто знает где собака зарыта. Для краткости определение деструктора не привожу.
0
|
||||||
| 07.10.2017, 23:58 | |
|
Ответы с готовыми решениями:
6
Boost::thread vs std::thread boost::thread |
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
| 08.10.2017, 17:50 | ||||||
|
С бустом не проверял, но мне кажется, что правильная реализация должна быть примерно такая:
0
|
||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||||||
| 10.10.2017, 11:47 [ТС] | ||||||
|
Проблема решена.
Дело не в коде было. Но конечный вариант привожу ниже
Для решения проблемы пришлось сделать 4 вещи: 1)Установить версию mingw32-64 4.8.3 так как полноценная поддержка вариативных шаблонов в буст потоках начиная с 4.8.1 2)Заново откомпилировать буст новым компилятором 3)Изменить натройки IDE Qt creator под новый компилятор 4)Изменить параметр BOOST_THREAD_VERSION в файле ./boost/thread/detail/config.hpp значение 4 (по умолчанию 2) Программа компилируется со ВТОРОГО раза, а на первый получаю вот такую бяку: D:\work\build-exness\lib\libboost_thread-mgw48-mt-1_55.a(thread.o):-1: ошибка: duplicate section `.data$_ZZN5boost16exception_detail27get _static_exception_objectINS0_14bad_excep tion_EEENS_13exception_ptrEvE2ep[__ZZN5boost16exception_detail27get_stati c_exception_objectINS0_14bad_exception_E EENS_13exception_ptrEvE2ep]' has different size D:\work\build-exness\lib\libboost_thread-mgw48-mt-1_55.a(thread.o):-1: ошибка: duplicate section `.data$_ZZN5boost16exception_detail27get _static_exception_objectINS0_10bad_alloc _EEENS_13exception_ptrEvE2ep[__ZZN5boost16exception_detail27get_stati c_exception_objectINS0_10bad_alloc_EEENS _13exception_ptrEvE2ep]' has different size D:\work\build-exness\lib\libboost_thread-mgw48-mt-1_55.a(thread.o):-1: ошибка: duplicate section `.data$_ZGVN5boost16exception_detail37ex ception_ptr_static_exception_objectINS0_ 14bad_exception_EE1eE[__ZGVN5boost16exception_detail37exceptio n_ptr_static_exception_objectINS0_14bad_ exception_EE1eE]' has different size Уже устал ковыряться в бустовской канализации.
0
|
||||||
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
| 10.10.2017, 12:40 | |
|
В поток (std::thread / boost::thread) нельзя передавать параметры по ссылке (хоть универсальной), только по значению.
0
|
|
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||||||
| 10.10.2017, 12:58 [ТС] | ||||||
|
Operok, Обоснуйте пожалуйста. Ваше утверждение выглядит нелепым.
boost/thread.hpp:
0
|
||||||
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
| 10.10.2017, 16:10 | |
Сообщение было отмечено Pechkin80 как решение
Решение
М.б. неверно выразился, передавать вы можете как вам угодно, только это всё будет скопировано в объект потока.
Boost.Thread tutorial Для std::thread искать не буду, для этой темы не актуально.
1
|
|
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||||||
| 10.10.2017, 17:45 [ТС] | ||||||
|
Operok, Ну так для этого классы обертки и существуют: boost::forward, boost::ref, boost::cref
Так как речь идёт о универсальной передачи, то используется boost::forward. Добавлено через 13 минут Operok, Я вам открою секрет, я использую в качестве аргумента Args... args ссылку на объект класса с удалённым конструктором копирования и содержащим внутри атомарные переменные. Если это по значению передавать, то будет мат перемат)))) Добавлено через 2 минуты Operok, Пардон, не только там классы обертки, но и функции обертки. Добавлено через 16 минут Operok, По поводу вами приведённой ссылки, то хорошо читать до конца:
Operok, Хотя конечно есть правда в ваших словах. но практика критерий истины. У меня работает. Возможно при перемещении задействуется както передача по ссылке. Я глубоко в потрохах не копался. Добавлено через 10 минут Возможно, я недокументированные возможности использую, так как я менял значение BOOST_THREAD_VERSION в коде. Он нигде не описан.
0
|
||||||
| 10.10.2017, 17:45 | |
|
Помогаю со студенческими работами здесь
7
Boost thread queue boost thread boost::thread синхронизация с VCL Исключения в потоке Boost::thread boost::thread() проблема с потоками. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|