Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Progress bar в консоли


Автор: Mormishka 18.2.2011, 21:07
Есть программа на консоли, которая рассчитывает очень долго некоторые вычисления. Не будет ли затратно выводить на консоль процесс? Сколько вообще он занимает процессора вывод через printf()?

Автор: Artemon 18.2.2011, 21:14

for(int k = 0; k < 1000; k++)
{
if(k%10==0)
printf("progress");
}

Автор: hawk3500 18.2.2011, 21:26
Если есть возможность на мой взгляд надо сделать так:

1.создать глобальную переменную которая будет отображать процент выполнения.-progres;
2.создать вторую глобальную переменную которая служит флагом.Допустим bool StartProgressBarr;И если идёт обработка то значение
переменной TRUE если нет обработки и прогресс бар не нужен то FALSE;
3.Создать поток который и будет выводить прогресс:

DWORD WINAPI RThreadProc( LPVOID lpParam ) 
{ 

    while(TRUE)
   {
      while(StartProgressBarr==FALSE)Sleep(20);
      printf("%d",progres);
      if(progres==100)StartProgressBarr=FALSE;//100%
      Sleep(20);
   }
return 1;
}

4.Создать этот поток.
Таким образом и процессор на это тратиться сильно не будет, и конфликта с другими процессами в разделении процессорного времени не будет благодоря Sleep();Значение Sleep уменьшать не стоит, если хотите то увеличте, менее 20 милисекунд система отрабатывает с большой погрешностью.Т.е. Sleep(10) в реальности "усыпит поток" на 10-30 мс.

Автор: jonie 19.2.2011, 13:16
hawk3500, а зафига так сложно? просто надо сделать какой-нибудь void AddProvress(), где и выводить символ "#" например. Саму функцию вызывать в нужном месте, как указал Artemon

Автор: boostcoder 19.2.2011, 16:25
http://www.boost.org/doc/libs/1_45_0/libs/timer/timer.htm#Class progress_display

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)