Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Boost.Threads

505
10 октября 2007 года
vAC
343 / / 28.02.2006
Вопрос в следующем:
как реализовать следующий шаблон:
1. Основной поток запускает новый, выполняющий некоторую работу за конечное время.
2. при завершении работы потока (возможен также вариант принудительного останова из основного потока) основной должен быть оповещен и выполнить некоторые действия.

Как сделать все на boost, я не сообразил, пришлось прибегнуть к виндузовым функциям отправки сообщений (PostMessage), что очень-очень не желательно в смысле переносимости кода.

PostMessage я использовал для оповещения основного потока о ходе работы (в этот момент основной должен "снимать" подсчитанные данные) и завершении.
350
10 октября 2007 года
cheburator
589 / / 01.06.2006
Зачем PostMessage.
Я, честно говоря, тоже не особо разбирался в boost::thread, но под виндой я оповещал основной поток с помощью Event (см. CreateEvent), основной поток собственно ждал это событие (см. WaitForSingleObject, WaitForMultipleObjects, MsgWaitForMultipleObjects). В свою очередь, запущенный поток может периодически проверять другой Event, означающий то, что основной поток хочет отменить действие.
Думаю, в boost если даже нет такого понятия, как event, его легко эмулировать с помощью boost::разные_мютексы.
505
10 октября 2007 года
vAC
343 / / 28.02.2006
Ну PostMessage для удобства: в основном окне (MFC) просто добавляется обработчик события и все, не надо делать ожиание события в цикле. В boostе есть такая вещь как condition (пишут, что заменяет event), только как-то работал он у меня не понятно.
Вообщим цель данного топика - описать кроссплатформенный шаблон (скажем на boost).
13K
11 октября 2007 года
specter
113 / / 28.09.2007
Цитата: vAC
Вопрос в следующем:
как реализовать следующий шаблон:
1. Основной поток запускает новый, выполняющий некоторую работу за конечное время.
2. при завершении работы потока (возможен также вариант принудительного останова из основного потока) основной должен быть оповещен и выполнить некоторые действия.

Как сделать все на boost, я не сообразил, пришлось прибегнуть к виндузовым функциям отправки сообщений (PostMessage), что очень-очень не желательно в смысле переносимости кода.

PostMessage я использовал для оповещения основного потока о ходе работы (в этот момент основной должен "снимать" подсчитанные данные) и завершении.


В бусте все делается достаточно просто... и легко обмениваться сообщениями - можешь сделать очередь, можешь просто флагами... но не забудь при обращении к каким-то переменным из разных потоков использовать мьютексы

Вот тебе пара примеров, если что спрашивай:

volatile bool flag (волатайл не обязателен, но лучше указать, тогда ты точно всегда получишь текущее значение переменной)

boost::mutex myMutex;

чтение переменной:
boost::mutex::scoped_lock lock(myMutex); - в этом случае происходит ожидание разблокировки мьютекса и перехват его
---тут пишешь/читаешь переменную---
---тут освобождаешь мьютекс:
lock.unlock(); или delete &lock;
Или если облать видимости заканчивается, то делать ничего не нужно ;)

Ну и пример запуска из функции класса другой функции этого же класса:
boost::thread t(boost::bind(&MyClass::run_session,this)); --- run_session - это функция

505
12 октября 2007 года
vAC
343 / / 28.02.2006
Да это все понятно, это так сказать азы boost'а. Еще раз повторюсь:
цель данного топика - описать шаблон...и обернуть его идиомой raii.
Я как время найду, набросаю примерчик и залью его на SVN. Совместными усилиями можно будет его довести до приемлемого вида, а потом набросать еще каких-нибудь шаблонов. Думаю пригодятся многим...
505
15 октября 2007 года
vAC
343 / / 28.02.2006
Что успел, то залил :) Пока самый минимум
http://www.assembla.com/wiki/show/cuP-NsEoWr3iI7abIlDkbG
Предложения, отзывы и прочее оставляйте в разделе Flow, ссылку на рабочую wiki и svn можно найти там же.
17K
17 мая 2009 года
Alca
2 / / 28.02.2006
>>Что успел, то залил Пока самый минимум
>>http://www.assembla.com/wiki/show/cu...Wr3iI7abIlDkbG
>>Предложения, отзывы и прочее оставляйте в разделе Flow, ссылку на рабочую wiki и svn можно найти там же.

НЕТ там ничего по этой ссылке
2
17 мая 2009 года
squirL
5.6K / / 13.08.2003
Цитата: Alca
>>Что успел, то залил Пока самый минимум
>>http://www.assembla.com/wiki/show/cu...Wr3iI7abIlDkbG
>>Предложения, отзывы и прочее оставляйте в разделе Flow, ссылку на рабочую wiki и svn можно найти там же.

НЕТ там ничего по этой ссылке



чувак ты на дату поста посмотри, ага?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог