Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
20 / 23 / 6
Регистрация: 15.10.2020
Сообщений: 134

Какой самый быстрый способ очистить консоль?

06.11.2021, 18:08. Показов 3521. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всего я нашел три способа это сделать:
Первый - используя system("cls"), но он занимает целых 40 миллисекунд (395050 такта), да и слишком уж просто выглядит.
Второй - вывести 27 новых линий, этот метод занимает 0-1 миллисекунду (16424 такта), но выглядит как костыль и использовать его нет особого желания. Я конечно понимаю что стандартная консоль Windows это распознает но все же..
Третий - с помощью WinApi:
C++
1
2
3
4
5
6
7
8
9
// stdhndl обозначен раньше
COORD coord = { 0, 0 };
DWORD count;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(stdhndl, &csbi);
FillConsoleOutputCharacter(stdhndl, ' ',
    csbi.dwSize.X * csbi.dwSize.Y,
    coord, &count);
SetConsoleCursorPosition(stdhndl, coord);
Но он занимает уже 27 миллисекунд(271981 тактов), что тоже очень долго.

Кто нибудь знает как это сделать по быстрее?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2021, 18:08
Ответы с готовыми решениями:

Самый быстрый способ получить скрин экрана c++
Всем привет, вопрос в шапке. Не особо разбираюсь в этих темах. Что будет самое эффективное? Что быстрее GDI windows или DirectX? И от чего...

Наиболее быстрый способ записи в консоль
Какой наиболее быстрый способ отрисовки символов в консоли, если использовать исключительно WinAPI? Заранее благодарю за ответы

Какой самый простой способ передачи числа в процесс?
Есть главное приложение. В нём запускается дочерний процесс "push.exe" которое должно от родительского получить число и что-то сделать с...

5
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
08.11.2021, 01:28
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Второй - вывести 27 новых линий
Да?
Количество строк в консольном окне задаётся в настройках Windows (или конкретного приложения) и может меняться программно.
Количество символов в строке консольного окна задаётся в настройках Windows (или конкретного приложения) и может меняться программно.

Цитата Сообщение от BlackLightHack Посмотреть сообщение
Кто нибудь знает как это сделать по быстрее?
Описанные в сообщении парадоксы создают впечатление, что внутри использованных функций заданный символ выводится много раз индивидуально (каждый вывод - отдельным вызовом функции), откуда и тормоза.

Я бы посмотрел на скорость вывода функции WriteConsole() - она выводит не одиночные символы, а заливает консоль сразу большим объёмом текста из буфера (причём с автоматическим переносом на следующую строку, если не влезло).
Есть надежда, что такой способ отработает быстрее.
1
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
08.11.2021, 02:49
BlackLightHack, попробуй другие методы с MSDN'а. Самому проверять время - влом. https://docs.microsoft.com/en-... the-screen
1
20 / 23 / 6
Регистрация: 15.10.2020
Сообщений: 134
10.11.2021, 16:21  [ТС]
Цитата Сообщение от psergee Посмотреть сообщение
Самому проверять время - влом
Первый метод самый быстрый! Вот бенчмарк:
Кликните здесь для просмотра всего текста
EXAMPLE 1
3.2376ms
Ticks: 10361

EXAMPLE 2
29.7804ms
Ticks: 95298

EXAMPLE 3
61.5603ms
Ticks: 196993


Добавлено через 16 минут
Цитата Сообщение от tiun Посмотреть сообщение
Я бы посмотрел на скорость вывода функции WriteConsole()
Да, скорость вывода действительно очень большая: 233 такта. На моей машине это 0.073 миллисекунды.
С этим можно что нибудь придумать

Честно говоря, не знаю, как я её пропустил
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
10.11.2021, 16:43
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Первый метод самый быстрый! Вот бенчмарк:
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Честно говоря, не знаю, как я её пропустил
Бывает
0
222 / 19 / 0
Регистрация: 15.08.2016
Сообщений: 47
01.12.2021, 10:57
Я бы еще попробовал на скорость эти 2 вызова: GetConsoleScreenBufferInfo (узнаем размер буфера) + ScrollConsoleScreenBuffer (прокрутка). Посмотрите пример отсюда
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Example 2
 
#include <windows.h>
 
void cls(HANDLE hConsole)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    SMALL_RECT scrollRect;
    COORD scrollTarget;
    CHAR_INFO fill;
 
    // Get the number of character cells in the current buffer.
    if (!GetConsoleScreenBufferInfo(hConsole, &csbi))
    {
        return;
    }
 
    // Scroll the rectangle of the entire buffer.
    scrollRect.Left = 0;
    scrollRect.Top = 0;
    scrollRect.Right = csbi.dwSize.X;
    scrollRect.Bottom = csbi.dwSize.Y;
 
    // Scroll it upwards off the top of the buffer with a magnitude of the entire height.
    scrollTarget.X = 0;
    scrollTarget.Y = (SHORT)(0 - csbi.dwSize.Y);
 
    // Fill with empty spaces with the buffer's default text attribute.
    fill.Char.UnicodeChar = TEXT(' ');
    fill.Attributes = csbi.wAttributes;
 
    // Do the scroll
    ScrollConsoleScreenBuffer(hConsole, &scrollRect, NULL, scrollTarget, &fill);
 
    // Move the cursor to the top left corner too.
    csbi.dwCursorPosition.X = 0;
    csbi.dwCursorPosition.Y = 0;
 
    SetConsoleCursorPosition(hConsole, csbi.dwCursorPosition);
}
 
int main(void)
{
    HANDLE hStdout;
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
 
    cls(hStdout);
 
    return 0;
}

Еще, можно конечно не вызывать SetConsoleCursorPosition в конце (это уже как вам надо).

Добавлено через 1 час 49 минут
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Третий - с помощью WinApi
Тут еще может не хватать вызова FillConsoleOutputAttribute с таким же счетчиком (это если были выведены символы с другим цветом фона).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2021, 10:57
Помогаю со студенческими работами здесь

Какой самый быстрый способ решения СЛАУ?
Доброго дня. Помогите выбрать СЛАУ(системы линейных алгебраических уравнений), которым СЛАУ будет решаться компьютером быстрее всего

Считать квадратную матрицу. Какой самый быстрый способ это сделать?
Какие самые быстрые способы считывания в с++? Пример : мне надо считать квадратную матрицу. Какой самый быстрый способ это сделать?

Самый быстрый способ решения задачи a+b
несколько раз ходил на олимпиады, во многих из них в пробном туре даётся задача а+б, решаю её стандартным способом: cin &gt;&gt; a...

Самый быстрый способ передать числа в поток
Добрый вечер, форумчане. Спрошу на удачу, может кто съел уже собаку на этом. 1) Есть главный и дополнительный поток 2)...

Самый быстрый способ дополнить вектор массивом
есть вектор заполненный нулями: vector&lt;int&gt; v(100000); есть большой массив: int ar; for (int i = 0; i &lt; 100000;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru