私はBoostの本を勉強しています。今はAsioの章にあります。WindowsのBoost :: Asioは非同期に動作しません
https://theboostcpplibraries.com/boost.asio-scalability
私は、非同期タイマーの簡単な例を見つけました。 Windowsノートパソコンで、作者の説明とは違う例があることに気付いたとき、私は非常に驚いていました。ここ
は例のコードは、(わずかにブックに比べ変性、Iは、タイマーの値を意味する)である:
#include <boost/asio/io_service.hpp>
#include <boost/asio/steady_timer.hpp>
#include <chrono>
#include <thread>
#include <iostream>
using namespace boost::asio;
int main()
{
io_service ioservice1;
io_service ioservice2;
steady_timer timer1{ioservice1, std::chrono::seconds{3}};
timer1.async_wait([](const boost::system::error_code &ec)
{ std::cout << "3 sec\n"; });
steady_timer timer2{ioservice2, std::chrono::seconds{9}};
timer2.async_wait([](const boost::system::error_code &ec)
{ std::cout << "9 sec\n"; });
std::thread thread1{[&ioservice1](){ ioservice1.run(); }};
std::thread thread2{[&ioservice2](){ ioservice2.run(); }};
thread1.join();
thread2.join();
}
私は3秒後にコンソール上の最初の印刷を参照すべきであることが予想、及び次の6秒後に2番目のプリントアウトが表示されます。しかし、Windowsではこの方法では動作しませんでした。プログラムは、両方のメッセージを同時に印刷するのに9秒間待った。これはこの方法では機能しません!
Linuxですべて正常に動作することを確認しました。
WindowsとLinuxの動作にこのような違いがある理由は誰にも分かりますか? Windowsでのこの動作により、Asioは使用できなくなり、非同期では動作しません。
よろしく YotKay
あなたは正しいです!ありがとうございました。問題はフラッシングにあり、WindowsとLinuxでは異なった働きをします。 Windowsプログラムにstd :: endlを追加すると、3秒後にコンソールに出力が表示され始めました。だから、AsioではすべてがOKです。 – YotKay
@ YotKay asioは、Windowsよりもずっと長い間信頼性があります... –