ubuntu Linux中的多线程应用程序C++[复制]

kg7wmglp  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(224)

此问题在此处已有答案

std::cout won't print(4个答案)
5天前关闭。
我想同时运行两个循环,而不必等待一个循环完成后再开始另一个循环。我所做的在WINDOWS上可以工作,但在LINUX上不行,我不知道为什么。当我编译代码时,只需使用:g++ -o一个A.cpp,然后我运行它,它什么都不做,在标准输出上也不显示任何东西。在Windows上,id显示如下:12121221212222112121212121121212

  1. void f1()
  2. {
  3. for (int i = 0; i < 500; ++i)
  4. {
  5. std::cout << "1";
  6. std::this_thread::sleep_for(1s);
  7. }
  8. }
  9. void f2()
  10. {
  11. for (int i = 0; i < 500; ++i)
  12. {
  13. std::cout << "2";
  14. std::this_thread::sleep_for(1s);
  15. }
  16. }
  17. int main()
  18. {
  19. std::thread worker(f1);
  20. std::thread worker2(f2);
  21. int a;
  22. std::cin >> a;
  23. return 1;
  24. }

也许我遗漏了一些关于LINUX环境的东西,我必须在线程obj中设置一些参数。也许在LINUX中,我必须用另一种方式来做。我想知道这是否是在Linux上应该工作的东西,我只是遗漏了一些东西,或者我必须使用另一种方法。

ajsxfq5m

ajsxfq5m1#

您正在将“1“和“2”添加到stdout缓冲区,可能需要一段时间才能看到任何输出。
请参阅:https://stackoverflow.com/a/1716621
fprintf(stdout,“您的消息”)== std::cout〈〈“您的消息”
默认情况下,stdout流是行缓冲的,因此只有在到达换行符后才会显示缓冲区中的内容
也许在每个std::cout处添加一个“\n”可能会有所帮助。
你的线程看起来不错,但是当它们的任务完成时,最好使用.join()。调用.join()会暂停你的main()线程,但这正是std::cin的作用,对吗?
还有,我不会每1/2后冲水,冲水是相当昂贵的。

相关问题