Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - [167]
> << std::endl;
> std::cout << "Cancel? (c) " << std::endl;
> }
> }
> ).handle
> [&](display_withdrawal_cancelled const& msg) {
> {
> std::lock_guard
> std::cout << "Withdrawal cancelled"
> << std::endl;
> }
> }
> ).handle
> [&](display_pin_incorrect_message const& msg) {
> {
> std::lock_guard
> std::cout << "PIN incorrect" << std::endl;
> }
> }
> ).handle
> [&](eject_card const& msg) {
> {
> std::lock_guard
> std::cout << "Ejecting card" << std::endl;
> }
> }
> );
> }
> } catch (messaging::close_queue&) {
> }
> }
> messaging::sender get_sender() {
> return incoming;
> }
>};
Листинг С.10. Управляющая программа
>int main() {
> bank_machine bank;
> interface_machine interface_hardware;
> atm machine(bank.get_sender(), interface_hardware.get_sender());
> std::thread bank_thread(&bank_machine::run, &bank);
> std::thread if_thread(&interface_machine::run,
> &interface_hardware);
> std::thread atm_thread(&atm::run, &machine);
> messaging::sender atmqueue(machine.get_sender());
> bool quit_pressed = false;
> while (!quit_pressed) {
> char c = getchar();
> switch(с) {
> case '0':
> case '1':
> case '2':
> case '3':
> case '4':
> case '5':
> case '6':
> case '7':
> case '8':
> case '9':
> atmqueue.send(digit_pressed(с));
> break;
> case 'b':
> atmqueue.send(balance_pressed());
> break;
> case 'w':
> atmqueue.send(withdraw_pressed(50));
> break;
> case 'с':
> atmqueue.send(cancel_pressed());
> break;
> case 'q':
> quit_pressed = true;
> break;
> case 'i':
> atmqueue.send(card_inserted("acc1234"));
> break;
> }
> }
> bank.done();
> machine.done();
> interface_hardware.done();
> atm_thread.join();
> bank_thread.join();
> if_thread.join();
>}
Приложение D
Справочник по библиотеке С++ Thread Library
D.1. Заголовок ><chrono>
В заголовке > объявлены классы для представления моментов времени, интервалов и часов, которые служат источником объектов >time_point. В каждом классе часов имеется статическая переменная-член >is_steady, показывающая, являются ли данные часы стабильными. Стабильными называются часы, которые ходят с постоянной частотой и не допускают подведения. Единственные гарантированно стабильные часы представлены классом >std::chrono::steady_clock.
Содержимое заголовка
>namespace std {
>namespace chrono {
>template
>class duration;
>template<
> typename Clock,
> typename Duration = typename Clock::duration>
>class time_point;
>class system_clock;
>class steady_clock;
>typedef unspecified-clock-type high_resolution_clock;
>}
>}
D.1.1. Шаблон класса >std::chrono::duration
Шаблон класса s>td::chrono::duration предназначен для представления интервалов. Параметры шаблона >Rep и >Period — это соответственно тип данных для хранения значения интервала и конкретизация шаблона класса >std::ratio, которая задает промежуток времени (в виде долей секунды) между последовательными «тиками». Например, >std::chrono::duration определяет количество миллисекунд, представимое значением типа >int, s>td::chrono::duration — количество пятидесятых долей секунды, представимое значением типа >short, а >std::chrono::duration — количество минут, представимое значением типа >long long.
Определение класса
>template
>class duration {
>public:
> typedef Rep rep;
> typedef Period period;
> constexpr duration() = default;
> ~duration() = default;
> duration(const duration&) = default;
> duration& operator=(const duration&) = default;
> template
> constexpr explicit duration(const Rep2& r);
> template
> constexpr duration(const duration
> constexpr rep count() const;
> constexpr duration operator+() const;
> constexpr duration operator-() const;
> duration& operator++();
> duration operator++(int);
> duration& operator--();
> duration operator--(int);
> duration& operator+=(const duration& d);
> duration& operator-=(const duration& d);
> duration& operator*=(const rep& rhs);
> duration& operator/=(const rep& rhs);
> duration& operator%=(const rep& rhs);
> duration& operator%=(const duration& rhs);
> static constexpr duration zero();
> static constexpr duration min();
> static constexpr duration max();
>};
>template
>constexpr bool operator==(
> const duration
> const duration
>template
>constexpr bool operator !=(
> const duration
> const duration
>template
>constexpr bool operator<(
> const duration
> const duration
>template
>constexpr bool operator<=(
> const duration
>const duration
>template
Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, "Викиномика" стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции.
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.