Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71

Boost thread pool. Как остановить потоки?

31.07.2014, 12:02. Показов 4795. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Реализовал thread pool с помощью boost::thread_group и boost::asio::io_service

C++
1
2
3
4
5
6
7
8
9
10
11
    for (unsigned int i = 0; i < threadsCount_; ++i)
    {
        threadPool_.create_thread(boost::bind(&boost::asio::io_service::run, &ioService_));
    }
 
    for (unsigned int blockId = 0 ; blockId < countOfCryptedBlocks_; ++blockId)
    {
        ioService_.post(boost::bind(PERBlackBerry10Decrypter::DecryptMultithreading, this, blockId));
    }
    ioService_.stop();
    threadPool_.join_all();
Не подскажете как бы мне прервать всю эту работу?
Удалить все задачи нельзя, просто стопануть поток тоже не получается.
Есть какое-то решение на это все?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2014, 12:02
Ответы с готовыми решениями:

boost::pool
Начинаю изучать boost, понравилась идея пула объектов, решил потестить, ожидая существенное повышение производительности операций с...

Thread Pool
Что значити пул ? В моем пониманий этом просто массив , тогда ThreadPool это массив потоков . верно ? POSIX определяет...

Как остановить thread.Sleep по клику
дело такое - опрашиваю ком порты. есть функция и класс, отвечающие за разные методы. приходится ставить thread.sleep() чтобы получить...

8
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.07.2014, 12:19
interrapt_all()
ф-ция кидает исключение

Добавлено через 1 минуту
Цитата Сообщение от aLarman Посмотреть сообщение
ф-ция кидает исключение
не уверен на 100% правда,
еще есть remove_thread(thread * thrd)
можно попробовать этим методом покиллять треды
0
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
31.07.2014, 12:39  [ТС]
пробовал уже interrupt_all и ioService_.stop();
ничего не изменяется.

читал, чтобы interrupt_all заработало, нужно определить interrupt_points.
но не пойму как это сделать...
кто-то знает?

remove_thread(thread * thrd)
у меня thread_group, создаю потоки так:
threadPool_.create_thread(boost::bind(&b oost::asio::io_service::run, &ioService_));
не хотелось бы еще хранить указатели на потоки...
а иначе их не достать из thread_group;
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.07.2014, 13:32
Цитата Сообщение от razor_ua Посмотреть сообщение
читал, чтобы interrupt_all заработало, нужно определить interrupt_points.
но не пойму как это сделать...
кто-то знает?
в ф-ции которую запускаете в треде заюзать ф-цию
thread::join
thread::timed_join
thread::try_join_for
thread::try_join_until
condition_variable::wait
condition_variable::timed_wait
condition_variable::wait_for()
condition_variable::wait_until
condition_variable_any::wait
condition_variable_any::timed_wait
condition_variable_any::wait_for
condition_variable_any::wait_until
thread::sleep
this_thread::sleep_for
this_thread::sleep_until
this_thread::interruption_point

Добавлено через 1 минуту
что то стало не ясно, зачем вам тредпул? boost::asio:: без того асинхронная
1
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
31.07.2014, 13:40  [ТС]
заюзать одну из ниже перечисленных или как?

я в нескольких потоках выполняю эту функцию
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.07.2014, 14:04
да, обычно используют boost::this_thread::interruption_point()
Цитата Сообщение от razor_ua Посмотреть сообщение
я в нескольких потоках выполняю эту функцию
а зачем?
1
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
31.07.2014, 14:16  [ТС]
it works fine
спасибо!
ускоряю процесс
читаю файл, декриптую его и записываю в выходной файл.
блоки в криптованном файле независимы друг от друга (AES CTR),
поэтому, для лучшего перформенса, решено сделать в нескольких потоках
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.07.2014, 14:55
я не совсем конечно понимаю что происходит, но может собсно не ф-цию run в каждом процессе запускать а ф-цию криптования(декриптования)? после того как было сделано чтение, оно же все равно синхронное
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
31.07.2014, 17:43
asio::io_service::stop() может не работать так как вы это ожидали: boost::asio::io_service::stop()
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2014, 17:43
Помогаю со студенческими работами здесь

Распараллеливание сортировки, thread pool
Здравствуйте! Значит задача в том, чтобы распараллелить шейкерную сортировку, при этом использовать пул потоков. Тут речь не идет об...

Internals of Tomcat Thread Pool
Hi, I am working on a project which tries to tune the Tomcat thread pool dynamically by looking at runtime characteristics in order to...

FATAL EXCEPTION: pool-1-thread-5
Подскажите, пожалуйста, когда возникает, и что обозначает ошибка FATAL EXCEPTION: pool-1-thread-5? Только не пишите, чтобы я код...

Как остановить потоки
for (int i = 0; i &lt; StrToInt(Form1-&gt;sSpinEdit1-&gt;Text); i++) {//в Edit1 количество потоков _beginthreadex( NULL, 0, &amp;nobonob,(void *)0,...

Как остановить потоки?
Хочу сделать такую задачу. Создать 36 потоков. Остановить каждый (wait() ). и затем по команде notifyAll(), одновремено разбудить все и тот...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru