나는 아주 부스트를 향상시켰다. 크로스 플랫폼 저수준 C++ 네트워크 API가 필요 했으므로 asio를 선택했습니다. 이제는 성공적으로 소켓에 연결하고 작성했지만 비동기 읽기/쓰기를 사용하고 있기 때문에 요청을 추적 할 수있는 방법이 필요합니다 (필요한 경우 일종의 ID 보유). 설명서/참조를 살펴 봤는데 사용자 데이터를 처리기에 전달할 방법이 없다는 것을 알았습니다. 콜백으로 작동하고 ID를 추적하여 전달하는 특수 클래스를 만드는 것이 유일한 방법입니다. 콜백으로 소켓에 연결합니다. 더 좋은 방법이 있습니까? 아니면 그것을하는 가장 좋은 방법은 무엇입니까?소켓 및 사용자 값에 대한 비동기 쓰기 (boost :: asio 질문)
2
A
답변
3
async_xxx 함수는 완료 핸들러 유형에 템플리트 화됩니다. 핸들러는 일반 "콜백"일 필요는 없으며 올바른 operator() 시그니처를 표시하는 것이 될 수 있습니다.
당신은 따라서 같은 것을 할 수 있어야한다 :
// Warning: Not tested
struct MyReadHandler
{
MyReadHandler(Whatever ContextInformation) : m_Context(ContextInformation){}
void
operator()(const boost::system::error_code& error, std::size_t bytes_transferred)
{
// Use m_Context
// ...
}
Whatever m_Context;
};
boost::asio::async_read(socket, buffer, MyReadHander(the_context));
또는, 당신은 또한 일반 함수로 핸들러를 가질 수와 asio tutorial에 설명 된대로 호출 사이트에 바인딩합니다. 위의 예는 다음과 같습니다.
void
HandleRead(
const boost::system::error_code& error,
std::size_t bytes_transferred
Whatever context
)
{
//...
}
boost::asio::async_read(socket, buffer, boost::bind(&HandleRead,
boost::asio::placeholders::error_code,
boost::asio::placeholders::bytes_transferred,
the_context
));
관련 문제
- 1. boost :: asio 비동기 작업 및 리소스
- 2. Boost :: asio 소켓 - 연결을 끊는 방법?
- 3. 부스트 Asio 및 웹 소켓?
- 4. Boost :: asio 및 async_read
- 5. C# 비동기 소켓 질문
- 6. boost asio ssl stream 소켓 컴파일 문제
- 7. 메모리 조각화 @ boost :: asio?
- 8. boost.asio tcp 소켓, 비동기 작업이 주문됩니까?
- 9. boost :: asio timeouts 예 - 데이터 쓰기가 비쌉니다.
- 10. Boost :: Asio :: Ip :: Tcp :: Iostream 질문
- 11. boost :: asio 및 재귀 적 서버 호출
- 12. Win32 비동기 소켓 기본 질문
- 13. 부스트 :: ASIO :: IP : TCP : 소켓
- 14. boost :: asio :: io_service가 예외를 던졌습니다
- 15. 이전 데이터를 읽는 C++ boost asio tcp 소켓
- 16. 블로킹 또는 비동기 boost :: asio :: socket을 사용하여 프로토콜 핸드 셰이크 구현 읽기/쓰기
- 17. boost asio io_service.run()
- 18. boost :: asio :: async_read_until 문제
- 19. boost :: asio :: async_resolve 문제
- 20. boost :: asio로 비동기 클라이언트 만들기
- 21. boost :: asio 및 boost :: iostreams (또는 다른 무엇입니까?)로 비동기 파일 차단을 비동기 적으로 수행하는 데 도움이 필요합니다.
- 22. 차단을위한 C++ boost asio timeout 연결
- 23. boost :: asio 서버 다중 프로세스
- 24. 일부 작업 연속화 - boost :: asio
- 25. Protobuf 메시지 보내기 boost :: asio
- 26. C++ Boost ASIO 간단한주기 타이머?
- 27. boost :: asio 깨끗하게 연결 해제
- 28. Boost :: asio async_wait 처리기 서명
- 29. 파일의 비동기 쓰기 및 읽기
- 30. Boost :: Asio for C++의 문제점
고마워요! 그것은 완벽하게 작동했습니다. – fingerprint211b