|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
std::thread - как запустить поток отложенно?02.05.2023, 11:08. Показов 6834. Ответов 77
Метки нет (Все метки)
В заголовке вопрос в общем-то.
Я вот этот момент в новомодном С++ не могу никак понять: как создать объект потока, но запустить выполнение потока его позже, не в конструкторе? Почему нет такого варианта в std::thread? или я не вижу? как так странно всё задизайнено?
0
|
|
| 02.05.2023, 11:08 | |
|
Ответы с готовыми решениями:
77
Как удалить зависший std::thread::detach поток без внедрения туда дополнительной контролирующей логики |
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
|
||
| 03.05.2023, 13:58 | ||
|
В зависимости от состояния системы. Если иметь поток в приостановленном состоянии, то запуск происходит мгновенною Добавлено через 2 минуты Содание потока занимает, не только много времяни, но оно ещё непредсказуемо. Добавлено через 2 минуты Звук писал вторым потоком...
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 03.05.2023, 14:00 | ||
Да и это вообще про скорость это спорно. Может на ядре сидит поток с IRQL > PASSIVE_LEVEL, то его уже никак не вытеснишь из user-mode, придется ждать.
1
|
||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
|
|
| 03.05.2023, 14:00 | |
|
Если запускать поток одновременно с его созданием, то начало записи не совпадает с видео...
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 03.05.2023, 14:01 | |
|
Наталья8, ну там большая работа проводится, стек потока выделяется, регистрируется объект ядра (std::thread инкапсулирует поток ОС), в общем много чего. Это прямо провал в производительности по сравнению с остальным локальным кодом программы. Вот просто первая попавшаяся ссылка (с первой попавшейся ОС): https://developer.apple.com/li... reads.html
Написано: Creation time - Approximately 90 microseconds. 90 микросекунд! Это просто пропасть по сравнению с остальным кодом. Поэтому-то и используют пулы потоков, где все потоки уже запущены и просто ждут задач. Случай, когда у нас есть один поток в suspended (каким угодно способом) режиме - это просто вырождений случай пула потоков из одного потока (и без очереди)
3
|
|
|
Комп_Оратор)
|
||
| 03.05.2023, 14:02 | ||
|
0
|
||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
|
|
| 03.05.2023, 14:02 | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 03.05.2023, 14:09 | ||
|
А вот если ваш пример чуть переделать и засунуть в лямбду само создание потока, а потом эту лямбду где-то сохранить и вызвать в нужный (отложенный) момент, то будет то, что надо
1
|
||
|
Комп_Оратор)
|
|||
| 03.05.2023, 14:14 | |||
|
Добавлено через 1 минуту
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 03.05.2023, 14:16 | |
|
0
|
|
| 03.05.2023, 14:21 [ТС] | |
|
Не по теме: Разжег пожар :D
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 03.05.2023, 14:26 | |||||||
|
Кликните здесь для просмотра всего текста
1
|
|||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 03.05.2023, 15:01 | |
|
2
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 03.05.2023, 15:05 | |
|
zayats80888, да, это залет
![]() Добавлено через 30 секунд PS. Конечно же там надо по значению их сохранить
1
|
|
| 03.05.2023, 17:39 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 03.05.2023, 20:49 | ||
|
Однако что бы поток из пула "проснулся" и выполнил задачу, нужно его уведомить. Такое уведомление/запуск потока на исполнение задачи как правило сопровождается "погружением" в kernel space, а это тоже требует времени, плюс время на организацию начала выполнения задачи (например, может быть захват мьютекса что бы извлечь задачу из списка задач, что так же может приводить к "погружению" в kernel space). А когда мы создаем поток и сразу его запускаем, то задержек по этим причинам у нас не бывает. Если тредпул и выигрывает у такого "наивного" подхода, то уж не на 90 заявленных микросекунд
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 03.05.2023, 21:10 | ||||
В общем, пример подтверждает, что она действительно низкая, и если есть возможность ее увеличить, то стоит ей воспользоваться.
0
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 03.05.2023, 21:56 | |||
|
Так же уведомление тоже время занимает. Более того, на уведомлении все не заканчивается... условно говоря некий notify_all "разбудит" n потоков, которые вытеснят n задач (возможно даже напрасно, так как задача может быть одна), а затем они благополучно "уснут", ничего не сделав... все это тоже время Добавлено через 19 минут По посту #62 так же хочу сделать уточнение. Когда я говорил про скорость, то имел ввиду то, что условно говоря "мгновенного" запуска может и не быть. Иногда даже если код написан оптимально, само окружение в котором этот код выполняется, может ставить палки в колеса. Как частный случай, можно рассмотреть ситуацию когда есть привязка потока к конкретному ядру (cpu affinity), а это ядро может быть слишком занято более приоритетными задачами, когда нам захочется пробудить поток. И в таком случае эта условная "мгновенность" может превратиться в условную "долгую ночь"...
0
|
|||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
|
|||||||
| 03.05.2023, 23:11 | |||||||
|
Могло опоздать на полсекунды. Какие там 90 микросекунд... (На виндовс... создание уже запущенного потока...) Добавлено через 4 минуты 0.3 секунды уже заметно отставание... Добавлено через 7 минут Здесь такого наворочано. Всё равно ни чё не поймёшь.
0
|
|||||||
| 03.05.2023, 23:11 | |
|
Как убить std::thread? Использование std::function в std::thread Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list" Boost::thread vs std::thread Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|