저는 C++로 코딩 중이므로 비동기 적으로 이미지 파일을로드하려고합니다. 몇 가지 연구가 끝나면 boost :: asio와 boost :: iostreams를 사용하여 몇 가지 언급을 발견했습니다. 그러나, boost :: asio에 대한 문서와 예제는 대부분 소켓과 관련되어 있으므로별로 도움이되지 않습니다. 여기 boost :: asio 및 boost :: iostreams (또는 다른 무엇입니까?)로 비동기 파일 차단을 비동기 적으로 수행하는 데 도움이 필요합니다.
내가 필요로하는 무슨이다.- 로드 비동기 적으로로드 완료시 파일을, 콜백 함수를 실행 (내 경우, 콜백 함수는 V8을 사용하여 자바 스크립트 함수 객체를 실행하는 자바 스크립트 엔진)
- 콜백 함수는 main 함수와 동일한 스레드 내에서 실행되어야합니다. (v8은 스레드로부터 안전하지 않기 때문에)
- 리눅스와 윈도우에서 작업해야합니다.
async_read("test.jpg", &the_callback_function);
기능은 차단해서는 안되며, 파일로드가 완료되면, 그것은 'the_callback_function'를 실행해야합니다 :
그래서,이 같은 정말 좋은 것 (별도의 구현이 확인됩니다).
편집 : joshperry가 지적했듯이, boost :: asio는 주 스레드로 디스패치하지 못할 수도 있습니다. 그래서, 나는 boost :: asio와 boost : iostreams로 제한 할 필요가 없다고 생각한다. 이 요구 사항을 도울 수있는 모든 C/C++ 라이브러리가 정상적으로 작동해야합니다. 감사!
비동기 읽기가 완료되면 어떻게 메인 스레드로 디스패치 할 것으로 예상합니까? – joshperry
음 ... 잘 모르겠습니다. 나는 코 루틴이 그 일을 할지도 모른다고 생각하고있었습니다. 기본적으로 coroutine + non-blocking io는 이론적으로 작동해야합니다. 그래서 나는 asio가 계산서에 맞지 않을지도 모른다고 생각한다. –
메인 스레드로 돌아가는 것은 어려울 것입니다. 기다리지 않는 스레드에 신호를 보내는 좋은 방법은 없습니다. 메인 스레드가 어떤 작업을하고 있습니까? 모든 파일을 자주 확인하고 파일 읽기가 완료되었는지 확인할 수 있습니까? – Pace