부스트를 사용하여 일부 asio 작업을 구현하고 있습니다. 인터페이스 문제가 발생했습니다. 누가 초기화 작업에서 '처리기'를받지 못했지만, 바로 다음에boost :: asio :: io_service를 사용하여 통화 중 루프 방지하기
이것은 내가 '바쁜'루프를 작성하도록 강요합니다. 최소한 하나의 핸들러가 없어도 io_service를 실행하고 싶습니다. 가능합니까? 이것을 처리하는 방법은 무엇입니까? 서비스에 대한 처리기를 기다리시겠습니까? 이 ..
/** : */
void Run () { while(true) {m_srv.run(); Sleep(1);} } // once 1 handler is inside service, thread will not be in busy loop
private: // members:
io_service m_srv;
어떤 제안을 내 코드? 감사
이 코드의 문제 : 당신은 사용할 필요가
class App : public Base::Application
{
public:
/** : */
App(char* name, char* id) : Application(name, id), m_drv("NetTask"), m_worker("Worker"), m_acceptor(m_worker, Drv(), &OnAccept, 4567)
{
m_acceptor.Accept(Drv());
}
/** : */
inline DriverImp& Drv() { return static_cast<DriverImp&>(m_drv.Imp());}
/** : */
inline Reactor& Worker() { return m_worker; }
public:
APTR(Socket) m_sock;
private: // members:
Driver m_drv;
Reactor m_worker;
Acceptor m_acceptor;
};
루프에 약간의 문제가 있습니다. ['run']에 대한 문서 (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service/run/overload1 .html)은'run'이 반환되면 ['reset'] (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service/reset.html)를 호출해야한다고 말합니다. 'run'을 다시 호출하기 전에. –
나는 실행을 떠나고 싶지 않다. :), 핸들러는 시작 후에 존재해야만한다. 그러나 ok, 나는 그것을 찾을 것이다. 아직도 바쁜 루프를 피하는 방법은 무엇인가? – Alon
Boost ASIO를 마지막으로 사용한 이래로 2 년 전이었습니다. 지금은 소스를 사용할 수 없지만,'io_service.run()'호출을 자체 스레드에 넣었습니다. 그리고 didn 루프가 없습니다. 나는 비동기 호출이 만들어지기 전에 완료되었다고 생각하며, 어쨌든 잘 동작했다. –