C++ Вопрос Время в Console App

Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Всем Привет, я делаю своё приложение на С++
И у меня проблема со временем, я его сделал, но оно работает не так как надо.

Получается при открытии Консоли пишет этот текст, а слева время.
Время статичное, то есть оно написало к примеру 15:54:2 и всё, а надо что бы оно постоянно обновлялось, а текст остался только время, я так понимаю это делается через цикл? Пример 15:54:2 через некоторое время 15:54 30 и т.д.
То есть мне нужно что бы в цикле была не вся консоль, а только время, и как мне сделать что бы оно постоянно обновлялось и при этом консоль не мигала?

Может пожалуйста кто-нибудь подсказать как это сделать?

Вот как оно выглядит статично:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Если нужно постоянное обновление текста в консоли - обойтись без «миганий», посредством очистки, не удастся. Создайте отдельный поток, в котором с определенной задержкой вы будете стирать время с помощью программного вывода backspace и писать новое. Возвращаться на позицию в строке можно с помощью функции winapi SetConsoleCursorPosition.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Если нужно постоянное обновление текста в консоли - обойтись без «миганий», посредством очистки, не удастся. Создайте отдельный поток, в котором с определенной задержкой вы будете стирать время с помощью программного вывода backspace и писать новое. Возвращаться на позицию в строке можно с помощью функции winapi SetConsoleCursorPosition.
Можно через двойную буфферизацию,только как это оформить?
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Можно через двойную буфферизацию,только как это оформить?
Не работал с двойной буферизацией. Вот пример кода с моим вариантом решения:
C++:
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <thread>

using namespace std;

void run(HANDLE hCon, COORD cPos) {
    int i = 1;
    while (i < 10) {
        SetConsoleCursorPosition(hCon, cPos);
        cout << i;
        i++;
        Sleep(1000);
    }
}

int main() {
    setlocale(LC_ALL, "RU");
    cout << "[0] Привет";

    HANDLE hCon;
    COORD cPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    cPos.Y = 0;
    cPos.X = 1;
    
    std::thread t(run, hCon, cPos);
    t.join();

    _getch();
    return 0;
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Не работал с двойной буферизацией. Вот пример кода с моим вариантом решения:
C++:
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <thread>

using namespace std;

void run(HANDLE hCon, COORD cPos) {
    int i = 1;
    while (i < 10) {
        SetConsoleCursorPosition(hCon, cPos);
        cout << i;
        i++;
        Sleep(1000);
    }
}

int main() {
    setlocale(LC_ALL, "RU");
    cout << "[0] Привет";

    HANDLE hCon;
    COORD cPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    cPos.Y = 0;
    cPos.X = 1;
  
    std::thread t(run, hCon, cPos);
    t.join();

    _getch();
    return 0;
}
А можешь пожалуйста попробовать сделать через двойную буферизацию?
Вот мой код с временем:
Пожалуйста, авторизуйтесь для просмотра ссылки.

а вот код моего друга, у него через двойную буферизацию, можешь попробовать с моим кодом времени сделать с двойной буферизацией?
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Посмотрите примеры на CyberForum -
Пожалуйста, авторизуйтесь для просмотра ссылки.
, я считаю это слишком лишним костылем.
А можешь пожалуйста с моим кодом сделать свой вместе ?
я просто не знаю как их соединить, Пожалуйста, если не тяжело.
Пожалуйста, авторизуйтесь для просмотра ссылки.
это мой код времени
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Дайте код, а не его скриншот.
Вот


void currenttime()
{
time_t curr_time;
curr_time = time(NULL);
tm* tm_local = localtime(&curr_time);


cout << Color(7) << "\n[" << tm_local->tm_hour << ":" << tm_local->tm_min << ":" << tm_local->tm_sec << "] ";
}
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Так что, поможешь? Пожалуйста )
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <thread>

using namespace std;

void currenttime()
{
    time_t curr_time;
    curr_time = time(NULL);
    tm* tm_local = localtime(&curr_time);

    cout << "[" << (tm_local->tm_hour < 10 ? "0" : "") << tm_local->tm_hour << ":" << (tm_local->tm_min < 10 ? "0" : "") << tm_local->tm_min << ":" << (tm_local->tm_sec < 10 ? "0" : "") << tm_local->tm_sec << "] ";
}

void run(HANDLE hCon, COORD cPos) {
    while (true) {
        SetConsoleCursorPosition(hCon, cPos);
        currenttime();
        Sleep(500);
    }
}

int main() {
    setlocale(LC_ALL, "RU");
    currenttime();
    cout << "Тест 123";

    HANDLE hCon;
    COORD cPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    cPos.Y = 0;
    cPos.X = 0;

    std::thread t(run, hCon, cPos);
    t.join();

    _getch();
    return 0;
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <thread>

using namespace std;

void currenttime()
{
    time_t curr_time;
    curr_time = time(NULL);
    tm* tm_local = localtime(&curr_time);

    cout << "[" << (tm_local->tm_hour < 10 ? "0" : "") << tm_local->tm_hour << ":" << (tm_local->tm_min < 10 ? "0" : "") << tm_local->tm_min << ":" << (tm_local->tm_sec < 10 ? "0" : "") << tm_local->tm_sec << "] ";
}

void run(HANDLE hCon, COORD cPos) {
    while (true) {
        SetConsoleCursorPosition(hCon, cPos);
        currenttime();
        Sleep(500);
    }
}

int main() {
    setlocale(LC_ALL, "RU");
    currenttime();
    cout << "Тест 123";

    HANDLE hCon;
    COORD cPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    cPos.Y = 0;
    cPos.X = 0;

    std::thread t(run, hCon, cPos);
    t.join();

    _getch();
    return 0;
}
завтра проверю как)))
Ты лучший)
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Пример 15:54:2 через некоторое время 15:54 30 и т.д.
То есть мне нужно что бы в цикле была не вся консоль, а только время, и как мне сделать что бы оно постоянно обновлялось и при этом консоль не мигала?
Зачем это нужно если не секрет?
Время при логгировании для того и пишут, чтобы понять когда событие произошло, если оно будет постоянно обновляться нафига юзеру вторые часы?
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Зачем это нужно если не секрет?
Время при логгировании для того и пишут, чтобы понять когда событие произошло, если оно будет постоянно обновляться нафига юзеру вторые часы?
Это не время для логгирования, это просто время которое показывается на данный момент
 
Последнее редактирование модератором:
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <thread>

using namespace std;

void currenttime()
{
    time_t curr_time;
    curr_time = time(NULL);
    tm* tm_local = localtime(&curr_time);

    cout << "[" << (tm_local->tm_hour < 10 ? "0" : "") << tm_local->tm_hour << ":" << (tm_local->tm_min < 10 ? "0" : "") << tm_local->tm_min << ":" << (tm_local->tm_sec < 10 ? "0" : "") << tm_local->tm_sec << "] ";
}

void run(HANDLE hCon, COORD cPos) {
    while (true) {
        SetConsoleCursorPosition(hCon, cPos);
        currenttime();
        Sleep(500);
    }
}

int main() {
    setlocale(LC_ALL, "RU");
    currenttime();
    cout << "Тест 123";

    HANDLE hCon;
    COORD cPos;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    cPos.Y = 0;
    cPos.X = 0;

    std::thread t(run, hCon, cPos);
    t.join();

    _getch();
    return 0;
}
Тут маленькая проблемка, оно показывает 2 времени, одно твоё сверху, а 2-е в меню Логина, и текст пишется рядом с твоим временем
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Тут маленькая проблемка, оно показывает 2 времени, одно твоё сверху, а 2-е в меню Логина, и текст пишется рядом с твоим временем
Перемещайте курсор на новую позицию.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Перемещайте курсор на новую позицию.
мне подсказали как можно ещё проще сделать, только подскажи плиз, как через массив обьявить timebuffer,
и через что обьявлять timebuffersize
 
Сверху Снизу