| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |