使用线程中的 write() 写入 stderr

问题描述 投票:0回答:0

在 Qt/C++ 应用程序中,我需要使用 write() 将一些文本打印到

stderr
。我多次做这样的事情:

  write(stdErrDescriptor, "H", 1);
  write(stdErrDescriptor, "e", 1);
  write(stdErrDescriptor, "l", 1);
  write(stdErrDescriptor, "l", 1);
  write(stdErrDescriptor, "o", 1);
  write(stdErrDescriptor, "\n", 1);

我从主线程和子线程调用它。线程的输出应该由内部程序逻辑序列化。这意味着主线程不应与子线程同时打印。这似乎是真的,因为实际上我在控制台上永远看不到交错的线条。仍然有一些我不明白的事情发生。

我期待看到这样的东西:

Hello
Hello
Hello
Hello
Hello
Hello

但是我得到这个:

Hello
Hello
H
e
l
l
o

H
e
l
l
o

Hello
Hello

请注意,行不是交错的。从子线程执行代码片段时,每次 write() 调用后仍然会添加一个换行符。

在 gdb 监督下从 Qt Creator 启动调试构建时,效果完全可重现。 但是,当手动单步执行代码或在没有调试器的情况下运行调试版本时,输出看起来很好。

我在 Kubuntu 20.04 和 GCC 12 上运行代码。

怎么回事?

c multithreading posix qt-creator stderr
© www.soinside.com 2019 - 2024. All rights reserved.