我已经使用 native win32 API 编写了一个 Windows 应用程序。我的应用程序将启动其他进程并捕获输出并以红色突出显示 stderr 输出。
为了实现这一点,我为 stdout 和 stderr 创建了一个单独的管道,并在调用 CreateProcess 时在 STARTUPINFO 结构中使用它们。然后我为每个 stdout/stderr 句柄启动一个单独的线程,从管道读取并将输出记录到窗口。
这在大多数情况下工作正常。我遇到的问题是,如果子进程快速连续登录到 stderr 和 stdout,我的应用程序有时会以不正确的顺序显示输出。我假设这是由于使用两个线程从每个句柄读取。
是否可以按照写入的原始顺序捕获 stdout 和 stderr,同时能够区分两者?
最佳答案
我很确定这是不可能的,除了编写生成的程序以写入数据包并为每个数据包添加时间戳。没有它,您通常可以计划在子进程的标准库中进行缓冲,因此当它们甚至通过管道传输到父进程时,它们很有可能已经出现故障。
关于winapi - 我可以单独捕获 stdout/stderr 并保持原始顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545619/