2016-01-21 70 views
0

我修改了boost :: asio的Timer.4示例,並用第二個參數間隔調用打印機類,並在間隔少時拋出不止一個。async_wait()in boost :: asio當io_service.run()在try-catch後立即觸發

當io.run()在try-catch中時,計時器在指定的時間後被觸發。

boost::asio::io_service io; 

try { 
    Printer p { io, 2 }; 
    p.print(); 
    io.run(); 
} catch (std::exception& e) { 
    std::cerr << e.what() << std::endl; 
} 

但是,當我將它移動到try-catch的下方時,會立即觸發。

try { 
    Printer p { io, 2 }; 
    p.print(); 
} catch (std::exception& e) { 
    std::cerr << e.what() << std::endl; 
} 

io.run(); 

這可能是一個邏輯上的解釋,它立即在try-catch之外觸發。有人可以闡明這一點嗎?

回答

2

這是因爲p在您離開try-catch範圍時正在銷燬。 C++有RAII編程技術。瞭解更多關於這個http://en.cppreference.com/w/cpp/language/raii

下面的例子應該工作:

Printer p { io, 2 }; 
try { 
    p.print(); 
} catch (std::exception& e) { 
    std::cerr << e.what() << std::endl; 
} 

io.run();