나는 부스트 프로그래밍에 새로운데, 나는 io_service::work
을 사용할 이유를 찾고 있었지만 그것을 이해할 수는 없다. 일부 테스트에서 나는 그것을 제거했으며 은으로 잘 처리됩니다.io_service :: work를 사용해야하는 이유는 무엇입니까?
답변
io_service::run()
은 비동기 작업이 수행되는 한 작업을 실행합니다. 보류 중 (또는 처리기 호출 중)의 비동기 조작이 없으면 run()
호출이 리턴됩니다.
그러나 모든 작업이 완료 될 때까지 run()
전화를 종료하지 말고 io_service
을 종료 할 것을 명시 적으로 지시 한 디자인이 있습니다. 그것은 io_service::work
이 사용 된 것입니다. work
개체를 생성하면 (보통 힙과 공유 _ptr에서 수행) io_service는 항상 보류중인 것을 고려하므로 run()
메서드는 반환되지 않습니다. 일단 서비스를 종료 할 수있게하려면 (일반적으로 종료하는 동안) 작업 개체를 삭제합니다.
io_service::work
은 실제로 당신이 io_service
에 work
를 추가, 당신은 소켓 작업 및 비동기 읽기를 시작하는 경우, 예를 들어, io_service
의 인스턴스에 게시 할 수있는 모든 작업의 기본 클래스입니다. 그래서 당신은 일반적으로 직접 work
를 사용하지 않습니다,하지만 한 가지 예외가 여기에 있습니다 :
io_service::run
즉시 수행 할 더 많은 일이 없기 때문에 반환, 그래서 일부 생산자와 소비자 스레드를 가지고 응용 프로그램을 고려할 것, 생산자는 때때로 작품을 생산 io_service::post
으로 소비자 스레드에 게시하지만 모든 작업이 완료되면 io_service::run
이 반환되어 소비자 스레드가 중지되므로 io_service
을 바쁘게 유지하기 위해 임의의 작업이 필요하므로이 경우에는 io_service::work
을 직접 사용할 수 있습니다.
- 1. MVVM을 사용해야하는 이유는 무엇입니까?
- 2. jsonp를 사용해야하는 이유는 무엇입니까?
- 3. 알림을 사용해야하는 이유는 무엇입니까?
- 4. Drools를 사용해야하는 이유는 무엇입니까?
- 5. WinDbg를 사용해야하는 이유는 무엇입니까?
- 6. DialogFragment를 사용해야하는 이유는 무엇입니까?
- 7. Unity를 사용해야하는 이유는 무엇입니까?
- 8. HTML에서 XFN을 사용해야하는 이유는 무엇입니까?
- 9. 안드로이드에서 fragment를 사용해야하는 이유는 무엇입니까?
- 10. l18n에 도메인을 사용해야하는 이유는 무엇입니까?
- 11. 포인터가 함수를 사용해야하는 이유는 무엇입니까?
- 12. .Net에서 Invoke를 사용해야하는 이유는 무엇입니까?
- 13. 글로벌 리소스를 사용해야하는 이유는 무엇입니까?
- 14. "apply"를 사용해야하는 이유는 무엇입니까?
- 15. 엔티티 관리자를 사용해야하는 이유는 무엇입니까?
- 16. "PIMPL"관용구를 사용해야하는 이유는 무엇입니까?
- 17. JSP/서블릿을 사용해야하는 이유는 무엇입니까?
- 18. ANT에서 classname을 사용해야하는 이유는 무엇입니까?
- 19. Java 7을 사용해야하는 이유는 무엇입니까?
- 20. 기본 키를 사용해야하는 이유는 무엇입니까?
- 21. AppHarbor 애드온을 사용해야하는 이유는 무엇입니까?
- 22. 클로저에 프록시 대신 Reify를 사용해야하는 이유는 무엇입니까?
- 23. display : 인라인 블록을 사용해야하는 이유는 무엇입니까?
- 24. XmlHttpRequest 객체를 다시 사용해야하는 이유는 무엇입니까?
- 25. 크론 작업 대신 데몬을 사용해야하는 이유는 무엇입니까?
- 26. bindValue/Param과 일반 변수를 사용해야하는 이유는 무엇입니까?
- 27. 파일 구조 - (젠드) MVC를 사용해야하는 이유는 무엇입니까?
- 28. Java에서이 상황에서 인터페이스를 사용해야하는 이유는 무엇입니까?
- 29. RDBMS 대신 NoSQL을 사용해야하는 이유는 무엇입니까?
- 30. 클래스 인스턴스에 대한 대리자를 사용해야하는 이유는 무엇입니까?
reset()을 사용하는 것처럼 삭제 하시겠습니까? – lucastamoios
보통, shared_ptr을 사용하여 작동한다면, 예, shared_ptr에'reset()'을 호출합니다. –