C ++ использует обработку мощности / времени во время загрузки консоли - PullRequest
0 голосов
/ 24 июня 2018

В настоящее время я новичок в программировании и не знаю, как позволить программе обрабатываться во время работы панели загрузки.Я хотел отобразить панель загрузки и проверить, закончилась ли программа обработкой.Если нет, то полоса обработки должна просто снова начать заполняться.

Мой код сейчас просто показывает полосу загрузки один раз и начинает обрабатываться после этого.Это довольно бесполезно.

Я исследовал в Google и здесь переполнение стека, но получил от этого только полосу загрузки, а не полезную интеграцию в моей программе.

Мне просто нужно простоеспособ проверить, будет ли вывод кроме строки загрузки, и мне нужно запустить остальную часть программы одновременно с панелью загрузки, просто чтобы сэкономить время.

#include <iostream>
#include <windows.h>
#include <unistd.h>
#include <string>
#include <thread>

using namespace std;

static void loading(){
  system("Color 0A");
  cout<<"\t\n\n";
  char a=177, b=219;
  cout<<"\t";
  for (int i=0;i<=50;i++)
  cout<<a;
  cout<<"\r";
  cout<<"\t";
  for (int i=0;i<=50;i++){
   cout<<b;
   for (int j=0;j<=2e7;j++);
  }
  cout << "\n\n";
}

int main(){

//ProjectEuler Problem___

  loading();

  int j=0;
  do{
    j++;
  }while(j<=1e9); //just an example to see when it is processing

  cout << "hi" << endl;

  return 0;
}

Яблагодарен за любую помощь.

1 Ответ

0 голосов
/ 24 июня 2018

Типичный шаблон, который вы ищете, будет выглядеть примерно так:

void do_expensive_work(std::atomic<bool>& done) {
  ... something expensive goes here...
  done = true;
}

int main() {
  std::atomic<bool> done = false;
  auto t = std::thread(do_expensive_work, std::ref(done));
  while (!done) {
    ... update your progress bar ...
    ... sleep a bit ...
  }
  t.join();
  return 0;
}

Специфика того, как вы сообщаете результат ваших вычислений обратно вызывающему потоку и т. Д., Зависит от вас.Точно так же теоретически вы можете использовать глобальный атомарный элемент для состояния «Готово» или заключить вычисления в класс, который отслеживает состояние и управляет выполнением потока.Приведенный выше код значительно упрощен, но дает общую картину.

...