9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173
1

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте как сделать так, чтобы время выводилось в правй верхний угол консоли и в тоже время можно было с ней работать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2012, 10:48
Ответы с готовыми решениями:

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

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

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

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

4
6046 / 3455 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
21.01.2012, 10:55 2
Cdvig, перед выводом используй метод Console.SetCursorPosition()
1
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
21.01.2012, 17:27 3
Цитата Сообщение от 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
4090 / 3824 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
24.01.2012, 09:10 4
Но ведь в вашем примере теоретически после смены позиции курсора, можен сработать основной поток, и "нагадить" не туда, куда нужно
0
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
24.01.2012, 11:16 5
Цитата Сообщение от 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
24.01.2012, 11:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2012, 11:16
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru