Tôi đang đẻ trứng một quá trình từ Win32 sử dụng CreateProcess
, thiết lập hStdOutput
và hStdError
thuộc tính của STARTUPINFO
để ống handle tạo ra với CreatePipe
. Tôi đã có hai chủ đề đọc các đường ống, chờ đợi cho dữ liệu để trở thành có sẵn (hoặc quá trình để hoàn thành, tại thời điểm đó nó kiểm tra rằng không có dữ liệu còn lại trước khi chấm dứt thread).
Khi dữ liệu có sẵn, tôi viết đầu ra cho một hộp văn bản lớn hiệu quả.Disable đệm trên chuyển hướng ống stdout (Win32 API, C++)
Điều gì đang xảy ra là đầu ra đang được lưu vào bộ đệm, do đó quá trình chạy chậm chỉ nhận được khối dữ liệu được ném vào hộp văn bản, nhưng không phải là "khi nó xảy ra".
Tôi không chắc liệu đó có phải là đường ống đang thực hiện việc lưu vào bộ đệm hay liên quan đến chuyển hướng.
Có cách nào để đặt đường ống thành không bị chặn hoặc bắt đầu quá trình theo cách sao cho giá trị truyền dữ liệu được gửi càng sớm càng tốt?
Tôi đang thử nghiệm với một ứng dụng thử nghiệm đó in dòng thứ hai ngoài
Here is line one
(waits one second)
Here is line two
(waits one second)
... etc
Phát trực tuyến có thuận lợi khi quá trình này được ghi vào bảng điều khiển không? Trên Linux, đây là một vấn đề khá nổi tiếng, và giải pháp là phân bổ một pseudo-tty bởi vì một số chương trình kích hoạt đệm khi đầu ra không phải là một tty. Trên Windows nó không phải là phổ biến để kiểm tra các loại filetype của stdout, vì vậy tôi sẽ không mong đợi đệm khác nhau đi vào một ống vs với một giao diện điều khiển. –
Có, khi nó ở trên bàn điều khiển (ví dụ: cmd.exe), nó phát như mong đợi, với sự chậm trễ và vân vân. –
Quy trình ghi vào đầu ra tiêu chuẩn như thế nào? Tôi nghĩ bạn có thể đang bật chế độ đệm trong dòng C hoặc C++. – wilx