Читаем Параллельное программирование на С++ в действии полностью

       std::cout << "Withdraw 50? (w)" << std::endl;

       std::cout << "Display Balance? (b)"

                 << std::endl;

       std::cout << "Cancel? (c) " << std::endl;

      }

     }

    ).handle(

     [&](display_withdrawal_cancelled const& msg) {

      {

       std::lock_guard lk(iom);

       std::cout << "Withdrawal cancelled"

                 << std::endl;

      }

     }

    ).handle(

     [&](display_pin_incorrect_message const& msg) {

      {

       std::lock_guard lk(iom);

       std::cout << "PIN incorrect" << std::endl;

      }

     }

    ).handle(

     [&](eject_card const& msg) {

      {

       std::lock_guard lk(iom);

       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();

}

<p>Приложение D</p><p>Справочник по библиотеке С++ Thread Library</p><p>D.1. Заголовок <code><<emphasis>chrono</emphasis>></code></p>

В заголовке объявлены классы для представления моментов времени, интервалов и часов, которые служат источником объектов 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;

}

}

<p>D.1.1. Шаблон класса <code>std::chrono::duration</code></p>

Шаблон класса std::chrono::duration предназначен для представления интервалов. Параметры шаблона Rep и Period — это соответственно тип данных для хранения значения интервала и конкретизация шаблона класса std::ratio, которая задает промежуток времени (в виде долей секунды) между последовательными «тиками». Например, std::chrono::duration определяет количество миллисекунд, представимое значением типа int, std::chrono::duration> — количество пятидесятых долей секунды, представимое значением типа short, а std::chrono::duration> — количество минут, представимое значением типа long long.

Определение класса

template >

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных