С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
19 / 19 / 16
Регистрация: 17.08.2015
Сообщений: 125
1

Часы в консоли

23.03.2016, 11:21. Показов 1291. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Такой вопрос - есть консольная программа , хочу сделать часы в угол консоли.
Подскажите как правильно это сделать?
Предполагаю:
-открыть второй поток (который выводит текущее время)
-сохранить текущие координаты курсора
-передать управление потоку
-когда поток отработал - вернуть курсор на место.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2016, 11:21
Ответы с готовыми решениями:

часы в консоли
Такой вопрос, допустим я пишу в консольке прогу, и хочу запилить часы в угол консоли, часы делаю...

Разработать семисегментные часы в консоли
Добрый день ! Знакомый попросил помочь Разработать семисегментные часы в консоли в двух вкрсиях...

Флеш часы: часы, показывающие указанное время
Привет всем!!!Помогите пожалуйста!!!Как создать флеш часы чтобы они показывали разное указанное...

Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) когда совпадут минуты и часы
Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) до того момента ...

5
Эксперт по математике/физикеЭксперт С++
2206 / 1411 / 411
Регистрация: 16.05.2013
Сообщений: 3,597
Записей в блоге: 6
23.03.2016, 12:08 2
Если в windows - есть специальные функции манипулирования буфером и курсором в консоли.
Подробнее можно ознакомиться у Победря Системное программирование в Windows.
0
19 / 19 / 16
Регистрация: 17.08.2015
Сообщений: 125
23.03.2016, 12:16  [ТС] 3
Цитата Сообщение от Ilot Посмотреть сообщение
Если в windows - есть специальные функции манипулирования буфером и курсором в консоли.
С курсором мне то как раз все понятно.
А вот с потоком нет.

Добавлено через 1 минуту
Вот использую для манипуляций с курсором:
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
void gotoXY(int x, int y) 
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(hStdOut, coord);
    
}
int wherex()
  {
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  if (!GetConsoleScreenBufferInfo(
         GetStdHandle( STD_OUTPUT_HANDLE ),
         &csbi
         ))
    return -1;
  return csbi.dwCursorPosition.X;
  }
int wherey()
  {
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  if (!GetConsoleScreenBufferInfo(
         GetStdHandle( STD_OUTPUT_HANDLE ),
         &csbi
         ))
    return -1;
  return csbi.dwCursorPosition.Y;
  }
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.03.2016, 14:27 4
Цитата Сообщение от aligator33 Посмотреть сообщение
Предполагаю:
-открыть второй поток (который выводит текущее время)
-сохранить текущие координаты курсора
-передать управление потоку
-когда поток отработал - вернуть курсор на место.
плохой вариант.
неизбежно влечет за собой конкуренцию за курсор
с основным потоком (и иными)
0
19 / 19 / 16
Регистрация: 17.08.2015
Сообщений: 125
23.03.2016, 14:36  [ТС] 5
Цитата Сообщение от hoggy Посмотреть сообщение
плохой вариант.
неизбежно влечет за собой конкуренцию за курсор
с основным потоком (и иными)
Подскажите вариант получше, буду признателен.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.03.2016, 19:03 6
Цитата Сообщение от aligator33 Посмотреть сообщение
Подскажите вариант получше, буду признателен.
я думаю, на самом деле ничего страшного не случится,
если в консольной утилитке,
дочерний поток будет спать большую часть времени,
и конкурировать за мутекс не чаще, чем раз в половину секунды
(или как часто должна картинка обновляться).


а вообще у каждого потока - свой двойной буфер.
поток пишет в своей собственный задний (не видимый) буфер.
когда он готов - флипает его (он становится передний, а передний - задним).

то есть потоки друг друга не ждут.

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

но это актуально только если нужна анимация какая нибудь.
и хочется, что бы все было плавно.

а так, по большому счету можно забить.
0
23.03.2016, 19:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2016, 19:03
Помогаю со студенческими работами здесь

Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) когда совпадут минуты и часы
Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) до того момента ...

Преобразовать введенное значение в часы и минуты и выводит на экран в виде “часы: минуты”
Здравствуйте, помогите пожалуйста с написанием программы. Написать программу, которая запрашивает...

Из секунд - часы, минуты и секунды. Из минут - часы, минуты
private void button4_Click(object sender, EventArgs e) { if (textBox3.Text ==...

Отобразить в консоли:увеличить и уменьшить длину массива на заданное ранее из консоли число
Доброго дня суток, исходный код и задача есть Подскажите пж, не получается реализовать некоторые...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru