HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: с++, asio, boost.asio, asynchronous input/output, асинхронный ввод-вывод, i/o services, i/o object, boost::asio::io_service, boost::asio::serial_port, boost::asio::steady_timer, cpp, многопоточная программа</p>
1 <p>Теги: с++, asio, boost.asio, asynchronous input/output, асинхронный ввод-вывод, i/o services, i/o object, boost::asio::io_service, boost::asio::serial_port, boost::asio::steady_timer, cpp, многопоточная программа</p>
2 <p>Asio означает<strong>asynchronous input/output</strong>- асинхронный ввод-вывод. Данная библиотека позволяет обрабатывать данные асинхронно, т.е. операция может быть запущена, и, не дожидаясь конца выполнения этой операции, мы можем запустить другую операцию.</p>
2 <p>Asio означает<strong>asynchronous input/output</strong>- асинхронный ввод-вывод. Данная библиотека позволяет обрабатывать данные асинхронно, т.е. операция может быть запущена, и, не дожидаясь конца выполнения этой операции, мы можем запустить другую операцию.</p>
3 <p>Asio оповещает об окончании выполнения операции. Преимущество - операции могут быть запущены параллельно, т.е. мы выигрываем в производительности.</p>
3 <p>Asio оповещает об окончании выполнения операции. Преимущество - операции могут быть запущены параллельно, т.е. мы выигрываем в производительности.</p>
4 <h2>I/O services и I/O objects</h2>
4 <h2>I/O services и I/O objects</h2>
5 <p>Программы, которые используют Boost.Asio для асинхронной обработки данных, основаны на<strong>I/O services</strong>и<strong>I/O objects</strong>. Для<strong>I/O services</strong>существует единственный класс<strong>boost::asio::io_service</strong>. В противоположность этому для<strong>I/O objects</strong>существуют несколько классов: - объект типа сокет boost::asio::ip::tcp::socket для TCP/IP соединения; - если данные пересылаются асинхронно через сериальный порт<strong>boost::asio::serial_port</strong>может быть инстанциирован; - другие классы, например<strong>boost::asio::steady_timer</strong>.</p>
5 <p>Программы, которые используют Boost.Asio для асинхронной обработки данных, основаны на<strong>I/O services</strong>и<strong>I/O objects</strong>. Для<strong>I/O services</strong>существует единственный класс<strong>boost::asio::io_service</strong>. В противоположность этому для<strong>I/O objects</strong>существуют несколько классов: - объект типа сокет boost::asio::ip::tcp::socket для TCP/IP соединения; - если данные пересылаются асинхронно через сериальный порт<strong>boost::asio::serial_port</strong>может быть инстанциирован; - другие классы, например<strong>boost::asio::steady_timer</strong>.</p>
6 <h2>Пример многопоточной программы, использующей Boost.Asio</h2>
6 <h2>Пример многопоточной программы, использующей Boost.Asio</h2>
7 <p>В заключении нашего обзора, чтобы почувствовать вкус, приведём пример многопоточной программы, использующей<strong>Boost.Asio</strong>:</p>
7 <p>В заключении нашего обзора, чтобы почувствовать вкус, приведём пример многопоточной программы, использующей<strong>Boost.Asio</strong>:</p>
8 #include &lt;boost/asio/io_service.hpp&gt; #include &lt;boost/asio/steady_timer.hpp&gt; #include &lt;chrono&gt; #include &lt;thread&gt; #include &lt;iostream&gt; using namespace boost::asio; int main() { io_service ioservice; steady_timer timer1{ioservice, std::chrono::seconds{3}}; timer1.async_wait([](const boost::system::error_code &amp;ec) { std::cout &lt;&lt; "3 sec\n"; }); steady_timer timer2{ioservice, std::chrono::seconds{3}}; timer2.async_wait([](const boost::system::error_code &amp;ec) { std::cout &lt;&lt; "3 sec\n"; }); std::thread thread1{[&amp;ioservice](){ ioservice.run(); }}; std::thread thread2{[&amp;ioservice](){ ioservice.run(); }}; thread1.join(); thread2.join(); }<p><em>Есть вопрос? Напишите в комментариях!</em></p>
8 #include &lt;boost/asio/io_service.hpp&gt; #include &lt;boost/asio/steady_timer.hpp&gt; #include &lt;chrono&gt; #include &lt;thread&gt; #include &lt;iostream&gt; using namespace boost::asio; int main() { io_service ioservice; steady_timer timer1{ioservice, std::chrono::seconds{3}}; timer1.async_wait([](const boost::system::error_code &amp;ec) { std::cout &lt;&lt; "3 sec\n"; }); steady_timer timer2{ioservice, std::chrono::seconds{3}}; timer2.async_wait([](const boost::system::error_code &amp;ec) { std::cout &lt;&lt; "3 sec\n"; }); std::thread thread1{[&amp;ioservice](){ ioservice.run(); }}; std::thread thread2{[&amp;ioservice](){ ioservice.run(); }}; thread1.join(); thread2.join(); }<p><em>Есть вопрос? Напишите в комментариях!</em></p>
9  
9