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

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

}

Приложение 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

Шаблон класса 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 / Словари и Энциклопедии