Boost.Asio는 프로그램이 스레드 및 명시적 잠금을 기반으로 하는 동시성 모델을 사용하지 않고도 이러한 장기 실행 작업을 관리할 수 있는 도구를 제공합니다.
Boost.Asio 라이브러리는 네트워킹과 같은 운영 체제 기능에 대한 액세스가 종종 필요한 시스템 프로그래밍에 C++를 사용하는 프로그래머를 위한 것입니다.
프로그램에는
boost::asio::io_context 개체, boost::asio::thread_pool 개체 또는 boost::asio::system_context와 같은 I/O 실행 컨텍스트가 하나 이상 있습니다.
이 I/O 실행 컨텍스트는 운영 체제의 I/O 서비스에 대한 프로그램의 링크를 나타냅니다.
boost::asio::io_context io_context;
I/O 작업을 수행하려면 프로그램에 TCP 소켓과 같은 I/O 개체가 필요합니다 .
boost::asio::ip::tcp::socket socket(io_context);
동기식 연결 작업이 수행되면 다음과 같은 일련의 이벤트가 발생합니다.
1. 프로그램은 I/O 객체를 호출하여 연결작업(connet)를 시작합니다.
socket.connect(server_endpoint);
boost::system::error_code ec;
socket.connect(server_endpoint, ec);
error_code 변수 ec은 작업 결과로 설정되며 예외가 발생하지 않습니다.
socket.async_connect(server_endpoint, your_completion_handler);
your_completion_handler는 signature 함수 또는 함수 객체입니다.
void your_completion_handler(const boost::system::error_code& ec);
signature
함수 시그니처란 함수의 원형에 명시되는 매개변수 리스트를 가리킵니다.ex) void your_completion_handler(const boost::system::error_code& ec);
your_completion_handler의 시그니처 : void(const boost::system::error_code&)
정확한 signature는 실행중인 비동기 작업의 의존에 필수적입니다.
참조문서는 각 작업에 적합한 형식을 나타냅니다.
io_context::run()에 대한 호출은 완료되지 않은 비동기 작업이 있는 동안 차단되므로 일반적으로 첫 번째 비동기 작업을 시작하자마자 호출합니다.
#include <iostream>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
https://www.boost.org/doc/libs/
https://www.boost.org/doc/libs/1_82_0/doc/html/boost_asio/overview/basics.html