Печать к консоли, не лавинно рассылая в C++

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

В основном, фиксация включает щелчок правой кнопкой по dll файлу (xunit.dll, например) в Windows Explorer, движении к Свойствам и нажатии на "Unblock" у основания вкладки рядом с текстом 'безопасности'. Кажется, что Vista / Windows 2008 автоматически отметит блоки, которые прибывают из других машин или Интернета как небезопасный.

Как пара комментаторов упомянули, Вы, возможно, также должны перезапустить Visual Studio для этого для вступления в силу.

5
задан Derek 2 September 2009 в 00:27
поделиться

5 ответов

Портативного способа очистки экрана нет, хотя есть простой способ вернуться к началу строки , используя \ r , а затем перезаписав что мы писали раньше. Я использую Sleep из Windows API :

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
 for(int i = 1; i <= 10; i++)
 {
  std::cout << i*10 << '%';
  std::cout.flush(); // see wintermute's comment
  Sleep(1000);
  std::cout << '\r';
 }
}
11
ответ дан 18 December 2019 в 10:47
поделиться

Curses - единственный способ сделать это переносимым.

Взгляните на это: http://code.google.com / p / tinycurses / wiki / basic1

3
ответ дан 18 December 2019 в 10:47
поделиться

Это зависит от платформы, которую вы используете. Я не знаю, как это сделать в Linux, но в Windows для этого можно использовать WriteConsole или SetConsoleCursorPosition .

Я не верю в полностью переносимый способ для этого существует кроме вывода тонны обратных пространств, как уже упоминалось. Метод backspace может вызвать сильное мерцание, которое может быть неприемлемым в вашем приложении ... функции Win32 не вызывают мерцания. Не уверен в библиотеке curses.

0
ответ дан 18 December 2019 в 10:47
поделиться

Какова скорость ваших циклов? Они в миллисекундах или секундах. Если ваши циклы короткие, вы можете обновить экран только через секунду по истечении.

Например,

   include <time.h>  /* if memory serves me correctly */
   int currentTime = time(0);
   for ( int i = 0; i < 100; i++)
   {
     /* do work here  and save the percentage completed */
     lastTime = time(0);
     if ((lastTime-currentTime) >= 1 ) 
     {
       /* output percentage completed (using AraK information) */
       currentTime = lastTime;
     }
   }

Это будет обновлять экран только каждую секунду и сэкономит время записи на экран, так как это потребует времени для перерисовки экрана (которое вы можете использовать для обработки). Кроме того, если ваши обновления выполняются так быстро, это позволяет пользователю видеть процентное соотношение, если ваши циклы довольно короткие, поскольку вы можете все время перерисовывать экран.

Примечание. Обновлено на основе комментариев.

0
ответ дан 18 December 2019 в 10:47
поделиться

Основное решение:

loop:
    backspace (over written text)
    write (without newline)
    flush
    wait and get updates

В качестве альтернативы вы можете попробовать решение, используя библиотеку curses - хотя я не уверен, что это именно то, что вам нужно. Curses предоставляет вашу базовую графику ascii для текстовых графических интерфейсов (иногда называемых TUI).

2
ответ дан 18 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: