Tôi đang cố gắng tìm ra giải pháp tốt nhất cho nonblocking IO qua stdin/stdout với các đặc điểm sau:Cross-nền tảng (linux/Win32) nonblocking C++ IO trên stdin/stdout/stderr
- Chừng nào có đủ dữ liệu, đọc trong n khối đã chỉnh sửa.
- Nếu không có đủ dữ liệu, hãy đọc từng phần một phần.
- Nếu không có sẵn dữ liệu, hãy chặn cho đến khi có một số dữ liệu (mặc dù nó có thể nhỏ hơn n).
Mục đích là cho phép truyền hiệu quả cho các tập dữ liệu lớn trong khi xử lý mã 'kiểm soát' ngay lập tức (thay vì để chúng nằm trong bộ đệm được điền một phần nào đó).
Tôi biết tôi có thể đạt được điều này bằng cách sử dụng luồng và vòng lặp istream :: get() hoặc bằng cách viết một loạt mã dành riêng cho nền tảng (vì bạn không thể chọn() trên các tệp trong cửa sổ). ((Ngoài ra còn có istream :: readome() có vẻ đầy hứa hẹn, nhưng kết quả duy nhất tôi có thể tìm thấy trên google là những người nói rằng nó không thực sự hoạt động tốt.))
Vì tôi chưa làm nhiều mã hóa với các API này, có lẽ có một cách tốt hơn.
Điều đó có vẻ khá hứa hẹn (một cái búa lớn cho một vấn đề nhỏ, nhưng có lẽ đáng học) ... Cảm ơn! –
Vâng, đó có thể là đặt cược tốt nhất của bạn cho I/O không đồng bộ di động, vì ngôn ngữ không có hỗ trợ gốc cho các luồng I/O * hoặc * không chặn. Bạn sẽ phải sử dụng một thư viện của một số loại, và tăng thường là một cược tốt. – jalf
(Nếu chỉ Win32 hỗ trợ select() hoặc poll() trên tay cầm tùy ý thay vì chỉ ổ cắm) ... Sau khi thực hiện một số thao tác, tôi đã xác nhận rằng tôi có thể làm những gì tôi cần và thậm chí có hướng dẫn cài đặt lên: http://www.highscore.de/boost/process/process/tutorials.html#process.tutorials.async_io –