|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
std::thread - как запустить поток отложенно?02.05.2023, 11:08. Показов 6490. Ответов 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
|
||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 02.05.2023, 14:59 | ||
|
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 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
|
||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 02.05.2023, 15:15 | ||
std::thread на объект std::thread*. Объектов все равно два, просто тип поменялся.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 02.05.2023, 15:19 | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||
| 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
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||
| 02.05.2023, 15:41 | ||||||||||||
|
Вот твой пример:
На самом деле я бы вообще с тобой не спорил, если бы ты не стал говорить, что это якобы семантически более правильно. Нет, не более. Это то же самое + доп. слой абстракции в виде (умного) указателя.
0
|
||||||||||||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 02.05.2023, 15:46 | |
|
так по теме: удалось запустить отложенно выполнение или на теории c++ остановились? или надо именно как в современном c++ это сделать средствами c++ ?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 02.05.2023, 15:59 | ||
|
"Оборачивание объекта" std::thread в умный указатель ничем не оправдано.Это имеет смысл для объектов, которые не поддерживают copy/move семантику и/или она технически дорагая и/или отсутствует RAII. Ваш "один объект" не сделает из std::thread синглтон, так что семантичски не вижу разницы.Добавлено через 10 минут З.Ы. Кстати, std::thread не поддерживает RAII в полной мере, так что, в отсутствии std::jthread, если бы вы сделали делитер, который джойнит поток, то это имело бы обоснование.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 02.05.2023, 16:00 | |||
|
Если под "отложенным" понимается просто создание объекта потока, а затем его "активация", то рецепт показан выше по теме. Да, тут у адептов других языков возникают вопросы, им этот способ кажется плохим, но он концептуально выполнен в С++ стиле для некопируемых объектов и ничего надежнее, чем этот способ, в современном С++ нет. Да и вообще - когда вся ответственность за создание объекта лежит только на конструкторе, а не распределена по всевозможным методам - это очень хорошо для кода. Добавлено через 36 секунд
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 02.05.2023, 16:10 | |||
|
0
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 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
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 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
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 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
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|