如何在控制台中制作进度条

How to make a progress bar in console?

本文关键字:控制台      更新时间:2023-10-16

我做了这样的事情:

#include <thread>
int main(int argc, char *argv[])
{
  //...
  std::thread sad_thread(MakeMeFeelSad(), params);
  sad_thread.join();
  //...
  std::thread happy_thread(MakeMeFeelHappy(), params);
  happy_thread.join();
  //...
}

函数MakeMeFeelSadMakeMeFeelHappy各运行约2分钟,我需要在cmd中制作如下内容:我很难过/很高兴(当函数运行时)-点总是出现,直到5,然后它们消失,然后再次出现。这就像一个有点的进度条。我该怎么做?

ETA:我的意思是我需要另一个带回调的线程吗?

您可以使用以下内容

std::future<void> fut = std::async(std::launch::async, MakeMeFeelSad, params);
std::cout << "I'm getting Sad";
std::chrono::milliseconds span (100);
while (fut.wait_for(span) == std::future_status::timeout)
    std::cout << '.';

您确实可以创建另一个thread,但也可以使用condition_variable对象,并在wait_until方法上循环。您将能够在此循环中显示您的点。

请参阅thread.join()的超时