Windows 및 Linux에서 실행중인 소프트웨어를 얻으려면 소켓 레이어를 다시 작성해야했습니다. Windows에서 select에서 WSAPoll로 변경하고 표준 이벤트를 포함하기 전에 WSAWaitForMultipleEvents를 사용하여 필요한 경우 제한 시간 전에 작업을 취소합니다. 1024 개 이상의 소켓을 처리해야하므로 select에서 Linux로 폴링으로 변경해야합니다. 리눅스에서 설문 조사 대기를 취소 할 수있는 방법이 있습니까? remoe 연결을 추가해야하는데 폴링 대기 시간 초과로 인해 속도가 느려집니다.소켓 폴링 작업 취소
답변
pipe()
을 사용하여 의사 내부 이벤트를 생성하고 이쪽의 판독면을 poll()
목록에 추가하여 첫 번째 이벤트로 만듭니다.
폴링을 취소하려면 파이프에 문자를 쓰고 poll()
이 반환됩니다. 012와 같이 내부 이벤트 일 것입니다.
다른 값을 파이프로 전달하여 조잡한 메시징 시스템으로 만들 수도 있습니다.
수동 이벤트를 사용하여 Windows 코드에서 이와 동일한 작업을 수행 할 수 있습니다.
그냥 이것을하는 IoEvent
클래스를 참조하십시오.
나는 이것을 읽는 것이 가장 좋은 방법이라고 믿을 수 없다. 큰 "이벤트"버퍼에서 실행되는 것을 피하기 위해 파이프에서 값을 읽으려고합니다. 손에 샘플이나 링크가 있습니까? –
@MartinSchlott이 방법으로는 전혀 문제가 없었으며, 우아하고 시스템 호출을 강제로 멈추지 않는다고 생각합니다. 또한'poll()'이 시작되기 전에 이벤트를 설정할 수 있음을 의미한다. 위에 링크 된 코드는 다양한 예제를 제공해야하지만 개념을 너무 많이 추상화 할 수있는'IoEvent' 및'IoEventWaiter' 클래스를 사용합니다. – trojanfoe
어, 먼저 게시물의 마지막 줄을 읽었습니다. 링크 Thx! –
- 1. 비동기 소켓 작업 취소
- 2. 파이썬 소켓 폴링 문제
- 3. 수천 개의 TCP 소켓 폴링
- 4. jQuery - 작업 큐 폴링
- 5. 비 소켓 소켓 작업
- 6. 작업 취소
- 7. 작업 취소
- 8. 작업 취소
- 9. 오류 : 비 소켓 소켓 작업
- 10. 작업 대기열에서 실행중인 작업 취소
- 11. PHP 소켓 프로그래밍 - 폴링 대 인터럽트
- 12. 로드 밸런싱 웹 소켓 및 긴 폴링
- 13. 백그라운드 작업 취소
- 14. 자바에서 복사 작업 취소
- 15. CoreData에서 실행 취소 작업
- 16. ContinueWith 취소 된 작업
- 17. ThreadPool 취소 .QueueUserWorkItem 작업
- 18. 긴 작업 취소
- 19. Dispose 메서드의 작업 취소
- 20. reshape2로 용해 작업 취소
- 21. signalR OnDisconnected() 취소 작업
- 22. 실행 취소 작업 구현
- 23. 작업 : 예외 및 취소
- 24. 중간에 작업 취소
- 25. TPL 취소 계속 작업
- 26. onPause의 작업 취소
- 27. 시간별 작업 취소
- 28. 스레드 작업 취소 중
- 29. Go에서 차단 작업 취소
- 30. 작업 취소 및 TaskContinuationOptions
사이드 노트에'boost :: asio'는 충분하지가 않습니까? – Nim
@ 님 : 여러 이유로 인해 프로젝트에서 boost를 사용하지 않았습니다. 여기에만 2 개. 공식 문서는 농담입니다. 중요한 행동은 설명하지 않습니다. boost :: asio에는 알려진 버그가 있습니다. 호스트 포트가 열려 있지 않으면 (호스트가 거부 됨) 올바른 연결 소켓과 구별 할 기회가 없으면 연결 및 즉시 닫기 이벤트가 트리거됩니다. 나는 C++ 11로 옮겨 갔고, 특히 boost :: asio 전체를 뒤로 돌렸다. –