Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
-THE_MASTER666-
Заблокирован
#1

Std::thread как усыпить/ пробудить поток? - C++

24.11.2014, 16:00. Просмотров 1085. Ответов 3
Метки нет (Все метки)

Есть ли в std::thread возможность как - то приостановить поток, не разрушая его, а потом, по какому - то сигналу / прерыванию - возобновить его работу?
Цель: в каждом потоке должен быть какой - то непрерывный цикл проверки входящего буфера на наличие сообщений для потока, если сообщения есть - что - то делаю, нет - ничего не делаю (дальше кручу цикл).
Так вот, если в каждом потоке делать while, то загрузка ЦП будет соответственно 100% (ну при наличие многих потоков). Хотелось бы как - то обойти этой вечный цикл ( по сути евент луп, проверяющий мессаги для потока).
Вот я и подумал, может как - то можно усыплять и пробуждать стандартные потоки, ну вот в WinAPI есть же всякие ResumeThread, но вроде это не очень хорошая практика.
Тут собственно есть пара нюансов:
1. Возможно ли это и если да, то как?
2. Много ли времени это жрёт и не проще ли просто удалять и создавать потоки?
3. Может есть какой - то другой фокус, чтоб для каждого потока проверять сообщения но не грузить его на всю катушку?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 16:00     Std::thread как усыпить/ пробудить поток?
Посмотрите здесь:

Как убить std::thread? - C++
К сожалению мне так и не удалось найти информацию о том, как корректно убить std::thread в случае необходимости. Как правило, предлагают...

Использование std::function в std::thread - C++
Нужно вызвать function fnc в новом потоке. Как сделать? function <void(vector<char>)> fnc; void test(vector<char> data) { for...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list" - C++
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в нескольких потоках одновременно. Вот он: ...

Boost::thread vs std::thread - C++
Доброго времени суток, решил углубить свои знания, и решил почитать про потоки, бустовые и те что в 11 стандарте приняли, с бустом все ясно...

Как задать скорость обработки операций в потоке std::thread? - C++
Процесс задается при помощи параметра «скорость обработки» - n операций в миллисекунду. Подскажите как это реализовать.

Стандартный поток и STL (std::copy to std::cout) - C++
#include <iostream> #include <sstream> #include <algorithm> #include <functional> #include <string> using namespace std; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
24.11.2014, 16:04     Std::thread как усыпить/ пробудить поток? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ответ на все вопросы - http://en.cppreference.com/w/cpp/thr...ition_variable
Nosey
1346 / 397 / 107
Регистрация: 22.10.2014
Сообщений: 861
Завершенные тесты: 2
24.11.2014, 16:05     Std::thread как усыпить/ пробудить поток? #3
http://en.cppreference.com/w/cpp/thr...ition_variable
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 16:13     Std::thread как усыпить/ пробудить поток?
Еще ссылки по теме:

Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии) - C++
Проверил работу программы на маленькой картинке(744 байт). Все работает. С несколько бОльшими файлами(512КБ) нет. Суть задачи в том,...

Как вывести std::wstring в поток? - C++
Как вывести std::wstring в поток, если в строке есть кириллица?

std::thread - C++
Возник вопрос: как создать массив потоков (точнее, как его инициализировать). То есть, мне нужно примерно такое: std::thread...

Std::thread в классе - C++
Всем привет есть код #include<thread> #include<iostream> class SomeClass { public : SomeClass(); ...

Многопоточность в C++11. std::thread - C++
Привет всем! использую таким образом многопоточность class A { public: void fun() { } };

Std::thread::detach() - C++
Что произойдет, если main - поток завершится раньше чем child.detach()? Добавлено через 3 минуты У меня программа просто завершилась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.11.2014, 16:13     Std::thread как усыпить/ пробудить поток? #4
может тоже пригодится yield()
Yandex
Объявления
24.11.2014, 16:13     Std::thread как усыпить/ пробудить поток?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru