Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173

Как сделать так, чтобы время выводилось в правй верхний угол консоли

21.01.2012, 10:48. Показов 1600. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте как сделать так, чтобы время выводилось в правй верхний угол консоли и в тоже время можно было с ней работать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2012, 10:48
Ответы с готовыми решениями:

Как сделать так, чтобы при вводе отрицательного кол-ва человек или =0, в консоли выводилось «Количество челове
Как сделать так, чтобы при вводе отрицательного кол-ва человек или =0, в консоли выводилось «Количество человек должно быть >= 1». Что...

Как сделать так чтобы число выводилось десятичной дробью
Как сделать так чтобы число выводилось десятичной дробью к примеру int x; x=1/4; и сдесь код который выводит число printf...

Как в программе сделать так , чтобы выводилось не в столбик, а в строку?
Как в программе сделать так , чтобы выводилось не в столбик, а в строку? class EmptyStackException(Exception): pass ...

4
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
21.01.2012, 10:55
Cdvig, перед выводом используй метод Console.SetCursorPosition()
1
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
21.01.2012, 17:27
Цитата Сообщение от Cdvig Посмотреть сообщение
и в тоже время можно было с ней работать?
Создать поток который будет:менять позицию курсора > выводит время в нужной точке консоли >
возвращать курсор на место > приостанавливаться и давать возможность работать основному потоку

Таким способом время будет постоянно обновляться. Это все нужно использовать в потоке. Буфер консоли скрывает позицию в которой выводится время, если в консоли много содержимого (по длине). Поэтому размер буфера должен быть равен размеру окна консоли (особенно длинна - вертикаль):
C#
1
Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight);
Цитата Сообщение от Cdvig Посмотреть сообщение
сделать так, чтобы время выводилось в правй верхний угол консоли и в тоже время можно было с ней работать
Код, вывод времени в консоле в отдельном потоке
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight);
            
            Thread time = new Thread(() => 
            {
                int cur_top;
                int cur_left;
                // В цикле обновляем время
                do
                {
                    //запоминаем позицию курсора
                    cur_left = Console.CursorLeft;
                    cur_top = Console.CursorTop;
 
                        Console.SetCursorPosition(Console.WindowWidth - 8, 0);//ширина-8 символов, верхняя позиция
                        Console.Write(DateTime.Now.ToLongTimeString());//выводим время
                        Console.SetCursorPosition(cur_left, cur_top);// возвращаем как было
          
                    Thread.Sleep(100);// даем поработать основному потоку
                } while (true);          
            }
            );
 
            time.Start();//запускаем поток
 
            // далее основные действия программы
 
            Console.ReadLine();
 
            time.Abort();//завершаем поток
        }
    }
}
2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
24.01.2012, 09:10
Но ведь в вашем примере теоретически после смены позиции курсора, можен сработать основной поток, и "нагадить" не туда, куда нужно
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
24.01.2012, 11:16
Цитата Сообщение от turbanoff Посмотреть сообщение
теоретически после смены позиции курсора, можен сработать основной поток, и "нагадить" не туда, куда нужно
Вполне может, но это легко решаемо:
C#
1
2
3
4
5
6
lock (Console.Out)
{
   Console.SetCursorPosition(Console.WindowWidth - 8, 0);//ширина-8 символов, верхняя позиция
   Console.Write(DateTime.Now.ToLongTimeString());//выводим время
   Console.SetCursorPosition(cur_left, cur_top);// возвращаем как было
}
Эти изменения позволят избежать проблем от основного потока при смене курсора. Основной поток не сможет ничего вывести. Но если основной поток просто будет выводить в разрешенное ему время текст в позицию времени на небольшой период оно затирается - буквально до ближайшего обновления.

Вывод времени в отдельном потоке (lock)
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight);
 
            Thread time = new Thread(() =>
            {
                int cur_top;
                int cur_left;
                // В цикле обновляем время
                do
                {
                    //запоминаем позицию курсора
                    cur_left = Console.CursorLeft;
                    cur_top = Console.CursorTop;
                    lock (Console.Out)
                    {
                        Console.SetCursorPosition(Console.WindowWidth - 8, 0);//ширина-8 символов, верхняя позиция
                        Console.Write(DateTime.Now.ToLongTimeString());//выводим время
                        Console.SetCursorPosition(cur_left, cur_top);// возвращаем как было
                    }           
                    
                    Thread.Sleep(100);// даем поработать основному потоку
                } while (true);
            }
            );
 
            time.Start();//запускаем поток
 
            // далее основные действия программы
 
            while (true)
            {
                Console.Write("AB");
                Thread.Sleep(10);
            }
 
            time.Abort();//завершаем поток
        }
    }
}


P.S. Хотя вместо lock следует использовать другой подход, если быть уж совсем педантичным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2012, 11:16
Помогаю со студенческими работами здесь

Как сделать так, чтобы выводилось не только число, но и $row[name]?
Код: if(isset($_POST)) { $price = "SELECT price,name FROM products WHERE prod_id='1'"; $result = mysql_query($price); $row =...

Как сделать так, чтобы на экран выводилось больше 24 значений
как сделать так,чтобы на эран выводилось больше 24 значений)))паскаль) это как-то наверно через repeat и until....но я не могу...

Как сделать так, чтобы в конце выводилось количество ненулевых элементов массива?
Здравствуйте! Я тут задание выполняю, есть один вопрос : как сделать так, чтобы в конце выводилось кол-во ненулевых элементов? Вот само...

Как сделать так , чтобы каждое значение выводилось в текст в бокс с названием?
Помогите!! Создать проект «Расчет стоимости нескольких порций мороженного» Стоимость должна вычисляться в цикле. Надо сделать так...

как сделать так чтобы все значение записи, выводилось как столбец, в запросе
в проблема такова: таблица1: 1) id_m_o - №(счетчик) 2) dt - номер счета дебет(текстовый) 3) kt - номер счета кредит(текстовый) ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru