📄 main.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Copyright 2002-2006 Andreas Huber Doenni// Distributed under the Boost Software License, Version 1.0. (See accompany-// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// This program shows how a state machine can be spread over several// translation units if necessary. The inner workings of a digital camera are// modeled, the corresponding state chart looks as follows://// ---------------------------// | |// | NotShooting |// | |// | ------------- |<---O// | O--->| Idle | | --------------// | ------------- | EvShutterHalf | |// | | ^ |------------------>| Shooting |// | EvConfig | | EvConfig | | |// | v | | EvShutterRelease | |// | ------------- |<------------------| |// | | Configuring | | | |// | ------------- | --------------// --------------------------- //// The states Configuring and Shooting will contain a large amount of logic,// so they are implemented in their own translation units. This way one team// could implement the Configuring mode while the other would work on the// Shooting mode. Once the above state chart is implemented, the teams could// work completely independently of each other.#include "Precompiled.hpp"#include "Camera.hpp"#include <iostream>//////////////////////////////////////////////////////////////////////////////char GetKey(){ char key; std::cin >> key; return key;}//////////////////////////////////////////////////////////////////////////////int main(){ std::cout << "Boost.Statechart Camera example\n\n"; std::cout << "h<CR>: Press shutter half-way\n"; std::cout << "f<CR>: Press shutter fully\n"; std::cout << "r<CR>: Release shutter\n"; std::cout << "c<CR>: Enter/exit configuration\n"; std::cout << "e<CR>: Exits the program\n\n"; std::cout << "You may chain commands, e.g. hfr<CR> first presses the shutter half-way,\n"; std::cout << "fully and then releases it.\n\n"; Camera myCamera; myCamera.initiate(); char key = GetKey(); while ( key != 'e' ) { switch( key ) { case 'h': { myCamera.process_event( EvShutterHalf() ); } break; case 'f': { myCamera.process_event( EvShutterFull() ); } break; case 'r': { myCamera.process_event( EvShutterRelease() ); } break; case 'c': { myCamera.process_event( EvConfig() ); } break; default: { std::cout << "Invalid key!\n"; } break; } key = GetKey(); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -