|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
std::thread - как запустить поток отложенно?02.05.2023, 11:08. Показов 6654. Ответов 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
|
||||
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 02.05.2023, 14:59 | ||
|
0
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
|||
| 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
|
||||||||||||
|
6353 / 3524 / 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
|||||||||
| 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
|
||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
||||||||||||
| 02.05.2023, 15:41 | ||||||||||||
|
Вот твой пример:
На самом деле я бы вообще с тобой не спорил, если бы ты не стал говорить, что это якобы семантически более правильно. Нет, не более. Это то же самое + доп. слой абстракции в виде (умного) указателя.
0
|
||||||||||||
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 892
|
|
| 02.05.2023, 15:46 | |
|
так по теме: удалось запустить отложенно выполнение или на теории c++ остановились? или надо именно как в современном c++ это сделать средствами c++ ?
0
|
|
|
6353 / 3524 / 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
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
|||
| 02.05.2023, 16:00 | |||
|
Если под "отложенным" понимается просто создание объекта потока, а затем его "активация", то рецепт показан выше по теме. Да, тут у адептов других языков возникают вопросы, им этот способ кажется плохим, но он концептуально выполнен в С++ стиле для некопируемых объектов и ничего надежнее, чем этот способ, в современном С++ нет. Да и вообще - когда вся ответственность за создание объекта лежит только на конструкторе, а не распределена по всевозможным методам - это очень хорошо для кода. Добавлено через 36 секунд
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 02.05.2023, 16:10 | |||
|
0
|
|||
|
6353 / 3524 / 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
|
||
|
6353 / 3524 / 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
|
|||
|
6353 / 3524 / 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
|
|||||||
|
6353 / 3524 / 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|