|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
std::thread - как запустить поток отложенно?02.05.2023, 11:08. Показов 6840. Ответов 77
Метки нет (Все метки)
В заголовке вопрос в общем-то.
Я вот этот момент в новомодном С++ не могу никак понять: как создать объект потока, но запустить выполнение потока его позже, не в конструкторе? Почему нет такого варианта в std::thread? или я не вижу? как так странно всё задизайнено?
0
|
|
| 02.05.2023, 11:08 | |
|
Ответы с готовыми решениями:
77
Как удалить зависший std::thread::detach поток без внедрения туда дополнительной контролирующей логики |
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 02.05.2023, 14:54 | ||||
|
0
|
||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 02.05.2023, 14:59 | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 02.05.2023, 15:02 | |||
|
Что касается всяких платформо-специфических вещей, то раз их нет в std::, значит либо их туда объективно нельзя добавить, либо в стандарте есть дефект. Во втором случае - в ваших (наших) силах на исправление ситуации повлиять: https://stdcpp.ru/ Но я хочу обратить внимание, что std::thread родился из boost::thread, в котором как раз было очень много платформоспецифичных компонентов, автор которой (Anthony Williams) принимал активное участие в стандартизации. Вот пример своего рода стенографии обсуждения (пусть даже не совсем по данной теме, но близко): https://isocpp.org/files/papers/p0206r0.html. Скажите, положа руку на сердце, - это работа "красноглазиков"? Чего мы добиваемся этим безусловным "хейтом" людей из комитета? Разве это конструктивно? Почему нельзя оценивать работу людей справедливо и учитывать контекст принятых решений? Продолжаем по теме развития std::thread: Вот пример, здесь предлагаются к добавлению атрибуты, например для указания размера стека потока (это как раз пример платформо-специфичной возможности): полезная вещь в определенных ситуациях, бесспорно. Здесь развитие этого предложения с анализом возможности добавления на разных платформах. Оцените масштаб проработки, в документе приведены и рассмотрены самые различные платформы, чтобы обоснованно сделать вывод, возможно ли добавить ту или иную возможность в стандартную библиотеку. То же самое вполне возможно сделать и для SUSPENDED режима и для чего-то еще.
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||||||||
| 02.05.2023, 15:09 | ||||||||||||
0
|
||||||||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 02.05.2023, 15:15 | ||
std::thread на объект std::thread*. Объектов все равно два, просто тип поменялся.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 02.05.2023, 15:19 | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||
| 02.05.2023, 15:22 | |||||||||
|
Нам надо именно "НЕ сразу". И что, вот такой код для std::string прям-таки вот ни разу не встречался?
Не по теме: Хотя ладно. Я, наверное, не буду дальше участвовать в теме, помню старые темы с тобой - слишком много ресурсов надо, чтобы с тобой разговаривать :) Как хотите, короче дальше.
0
|
|||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 02.05.2023, 15:36 | ||||
Но мы так же определили, что можно создать один экземпляр вместо двух, и этого достаточно что бы запустить поток. Может аналогия со строками проблемная, однако у меня не было задачи привести 100% аналог, это скорее была попытка показать ход мыслейДобавлено через 5 минут Уточню, когда я говорю об экземплярах класса, то речь идет об экземплярах std::thread (std::unique_ptr не является объектом потока, это просто враппер для него)
0
|
||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||||||||
| 02.05.2023, 15:41 | ||||||||||||
|
Вот твой пример:
На самом деле я бы вообще с тобой не спорил, если бы ты не стал говорить, что это якобы семантически более правильно. Нет, не более. Это то же самое + доп. слой абстракции в виде (умного) указателя.
0
|
||||||||||||
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
|
|
| 02.05.2023, 15:46 | |
|
так по теме: удалось запустить отложенно выполнение или на теории c++ остановились? или надо именно как в современном c++ это сделать средствами c++ ?
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 02.05.2023, 15:59 | ||
|
"Оборачивание объекта" std::thread в умный указатель ничем не оправдано.Это имеет смысл для объектов, которые не поддерживают copy/move семантику и/или она технически дорагая и/или отсутствует RAII. Ваш "один объект" не сделает из std::thread синглтон, так что семантичски не вижу разницы.Добавлено через 10 минут З.Ы. Кстати, std::thread не поддерживает RAII в полной мере, так что, в отсутствии std::jthread, если бы вы сделали делитер, который джойнит поток, то это имело бы обоснование.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 02.05.2023, 16:00 | |||
|
Если под "отложенным" понимается просто создание объекта потока, а затем его "активация", то рецепт показан выше по теме. Да, тут у адептов других языков возникают вопросы, им этот способ кажется плохим, но он концептуально выполнен в С++ стиле для некопируемых объектов и ничего надежнее, чем этот способ, в современном С++ нет. Да и вообще - когда вся ответственность за создание объекта лежит только на конструкторе, а не распределена по всевозможным методам - это очень хорошо для кода. Добавлено через 36 секунд
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 02.05.2023, 16:10 | |||
|
0
|
|||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|||
| 02.05.2023, 16:36 | |||
|
Добавлено через 2 минуты
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 02.05.2023, 16:43 | ||
|
Вот код из #3 std::thread - как запустить поток отложенно? Один экземпляр std::thread создается в main, а другой в функции launch_thread, а затем перемещается в тот объект, который был передан по ссылке в launch_thread из main. Поэтому мне не совсем понятно, почему вы называете это домыслом, тогда как в этом коде явно видно создание двух экземпляров класса std::thread. Суть вопроса была в том, что бы иметь на руках переменную потока с возможностью запустить поток после создания переменной, а не в момент ее инициализации. Это то, что я понял из вопроса, и ТС это никак не опроверг, иначе я бы не писал все эти сообщения. Причем решение я ему тоже дал и оно отвечает принципу один объект - один поток.
0
|
||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|||
| 02.05.2023, 16:51 | |||
|
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 02.05.2023, 17:07 | |||
|
Просто в случае с потоками есть техническое ограничение и мне понятны мотивы создания двух std::thread из #3, однако используя unique_ptr, мы можем обойти эти ограничения и использовать только один std::thread.
0
|
|||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|||
| 02.05.2023, 17:20 | |||
|
И я именно так делаю, когда вместо пары вызовов clear() и shrink_to_fit() просто пишу vec = {};.А еще я не буду оборачивать один вектор в unique_ptr ни при каких условиях .
0
|
|||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||
| 02.05.2023, 17:39 [ТС] | |||||||
0
|
|||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 02.05.2023, 17:40 | |
|
0
|
|
| 02.05.2023, 17:40 | |
|
Как убить std::thread? Использование std::function в std::thread Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list" Boost::thread vs std::thread Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|