Boost.Asio C++ 網絡編程之三:計時器

引言

文章的內容是翻譯 《Boost.Asio C++ Network Programming》這本書。

編譯IDE環境是 vs2017

計時器

一些I/O操作需要一個超時時間。它只能應用在異步操作上(同步意味着阻塞,因此沒有超時時間)。例如,下一條信息必須在100毫秒內從你的同伴那傳遞給你。

bool read = false;
void deadline_handler(const boost::system::error_code &) {
    std::cout << (read ? "read successfully" : "read failed") <<
    std::endl;
}
void read_handler(const boost::system::error_code &) {
    read = true;
}
ip::tcp::socket sock(service);
......
read = false;
char data[512];
sock.async_read_some(buffer(data, 512));
deadline_timer t(service, boost::posix_time::milliseconds(100));
t.async_wait(&deadline_handler);
service.run();

在上述代碼片段中,如果你在超時之前讀完了數據,read則被設置成true,這樣我們就能及時讀取同伴發送的信息。否則,當deadline_handler被調用時,read還是false,也就意味着我們的操作超時了。
Boost.Asio也支持同步計時器,但是它們通常和一個簡單的sleep操作是一樣的。boost::this_thread::sleep(500);和下面的代碼片段完成了同一件事情:

deadline_timer t(service, boost::posix_time::milliseconds(500));
t.wait();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章