以下面這個程式為例:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
void print(const boost::system::error_code &) { std::cout << "Hello, world!\n"; }
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(print);
io.run();
}
條件說明:
1. io_service 是必要的。
2. 開始計時的時間點是
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
就開始計時了,並非從 t.async_wait(print) 才開始計時。
小弟的想法是:
為什麼需要 io.run() 這個函數多此一舉呢?
既然 deadline_timer t(io, seconds(5)) 就已經開始計時,
那麼執行等待 5 秒就直接由 t.async_wait 去處理就好,主程式就一直繼續下去,
系統內部就直接以多工的方式等待 deadline 的到來,然後再去 print 就好,
何必又要搞一個 io.run() 呢?這其中的原理是什麼?
就以上的想法,向板上高手求教,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.100.86.180
※ previewslave:轉錄至看板 C_and_CPP 06/18 07:16