Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <boost/filesystem.hpp>
  4. #include <boost/asio/steady_timer.hpp>
  5. #include <boost/chrono.hpp>
  6. #include <string>
  7. #include <chrono>
  8.  
  9. auto tp_alarm = std::chrono::steady_clock::now();
  10. auto duration_display = std::chrono::milliseconds(0);
  11. auto duration_display_interval = std::chrono::milliseconds(500);
  12. bool duration_display_toggle = false;
  13.  
  14. // io_service for timer
  15. boost::asio::io_service io_service;
  16. boost::asio::steady_timer timer_alarm(io_service);
  17. boost::asio::steady_timer timer_display(io_service);
  18.  
  19. void handle_timer_alarm(const boost::system::error_code& error);
  20. void handle_timer_display(const boost::system::error_code& error);
  21.  
  22. void setup_timer_alarm(std::string duration) {
  23.     int hours, minutes, seconds;
  24.  
  25.     // match hours, minutes and seconds
  26.     sscanf_s(duration.c_str(), "%2d:%2d:%2d", &hours, &minutes, &seconds);
  27.  
  28.     // set timepoint
  29.     tp_alarm = std::chrono::steady_clock::now();
  30.     tp_alarm += std::chrono::hours(hours);
  31.     tp_alarm += std::chrono::minutes(minutes);
  32.     tp_alarm += std::chrono::seconds(seconds);
  33.  
  34.     // set duration_display
  35.     duration_display = std::chrono::hours(hours);
  36.     duration_display += std::chrono::minutes(minutes);
  37.     duration_display += std::chrono::seconds(seconds);
  38.  
  39.     // set timer
  40.     timer_alarm.expires_at(tp_alarm);
  41.     timer_alarm.async_wait(handle_timer_alarm);
  42.  
  43.     // output
  44.     //std::cout << duration.c_str() << std::endl;
  45.     //std::cout << hours << ":" << minutes << ":" << seconds << std::endl;
  46.     //std::cout << "expires in " << std::chrono::time_point_cast<std::chrono::minutes>(tp_alarm).time_since_epoch().count() << std::endl;
  47. }
  48.  
  49. void setup_timer_display() {
  50.     // create timepoint
  51.     auto tp = std::chrono::steady_clock::now();
  52.     tp += duration_display_interval;
  53.  
  54.     // set timer
  55.     timer_display.expires_at(tp);
  56.     timer_display.async_wait(handle_timer_display);
  57. }
  58.  
  59. void handle_timer_alarm(const boost::system::error_code& error) {
  60.     std::cout << "it's is happening!111" << std::endl;
  61.  
  62.     // disable all io_services
  63.     io_service.stop();
  64. }
  65.  
  66. void handle_timer_display(const boost::system::error_code& error) {
  67.     // reduce duration_display by duration_display_interval
  68.     duration_display -= duration_display_interval;
  69.  
  70.     // convert duration_display into seconds, and use it together with gmtime_s for easy printing
  71.     time_t time_t_display = std::chrono::duration_cast<std::chrono::seconds>(duration_display).count();
  72.     struct tm tm_display;
  73.     gmtime_s(&tm_display, &time_t_display);
  74.  
  75.     if (duration_display_toggle) {
  76.         printf("remaining: %.2d:%.2d:%.2d\r", tm_display.tm_hour, tm_display.tm_min, tm_display.tm_sec);
  77.     }
  78.     else {
  79.         printf("remaining: %.2d %.2d %.2d\r", tm_display.tm_hour, tm_display.tm_min, tm_display.tm_sec);
  80.     }
  81.  
  82.     // toggle
  83.     duration_display_toggle = !duration_display_toggle;
  84.  
  85.     // reset timer
  86.     setup_timer_display();
  87. }
  88.  
  89.  
  90. int main(int argc, char * argv[]) {
  91.  
  92.     // missing time
  93.     if (argc < 2) {
  94.         boost::filesystem::path path(argv[0]);
  95.         std::cerr << "Missing clock time!" << std::endl;
  96.         std::cerr << "Use '" << path.filename().string() << " 00:02:00'" << std::endl;
  97.         return -1;
  98.     }
  99.  
  100.     // setup timer alarm
  101.     setup_timer_alarm(argv[1]);
  102.  
  103.     // setup timer display
  104.     setup_timer_display();
  105.  
  106.     // start services
  107.     io_service.run();
  108.  
  109.     // alarm!
  110.     // ???
  111.  
  112.     return 0;
  113.  
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement