Форум программистов, компьютерный форум CyberForum.ru

Дополнительная "каретка" консоли - C++

Восстановить пароль Регистрация
 
Riderik
 Аватар для Riderik
28 / 28 / 1
Регистрация: 24.07.2011
Сообщений: 171
19.02.2012, 13:48     Дополнительная "каретка" консоли #1
Вопрос: возможно ли создать в программе дополнительную консольную каретку для вывода текста? Например чтобы текст выводился одновременно в двух местах?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
19.02.2012, 14:14     Дополнительная "каретка" консоли #2
можно вывести в одном месте, а потом переместить каретку в другое место и вывести там
Riderik
 Аватар для Riderik
28 / 28 / 1
Регистрация: 24.07.2011
Сообщений: 171
19.02.2012, 14:18  [ТС]     Дополнительная "каретка" консоли #3
Mayonez, Так и сделал. Но тут многопоточность, то есть нужно одновременно выводить. Для этого я сохранял текущее состояние каретки в каждом потоке и потом ее двигал. Но тут есть одно но: Так как используется одна и та же каретка, то бывает такой случай, что один поток успевает ее передвинуть еще до того, как другой успеет сохранить ее состояние для себя и сохранит уже передвинутое положение. То есть после этого они начнут выводить всё в одно место. Поэтому возник вопрос, а можно ли создать для каждого потока свою каретку, чтобы они так не конфликтовали?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.02.2012, 15:41     Дополнительная "каретка" консоли #4
Riderik, чтобы не было конфликтов, надо использовать мьютексы. Не давать одному потоку что-либо выводить, пока мьютекс, соответствующий выводу, не освобождён другим потоком.
-=ЮрА=-
Заблокирован
Автор FAQ
19.02.2012, 16:17     Дополнительная "каретка" консоли #5
Riderik, многопоточность лучше в API показывать, сделали пару клиентских областей и посредством TextOut выводите в них текст, вот вам приложение показывающее как это может быть

На счёт консоли сомневаюсь чтобы там было возможным создание множественного курсора(можно лишь управлять его позицией как это сделать показано здесь
Форматирование текста и изменение цвета текста в консоли)
Миниатюры
Дополнительная "каретка" консоли  
Вложения
Тип файла: rar mtread.exe.rar (37.0 Кб, 4 просмотров)
Riderik
 Аватар для Riderik
28 / 28 / 1
Регистрация: 24.07.2011
Сообщений: 171
19.02.2012, 17:22  [ТС]     Дополнительная "каретка" консоли #6
Всем спасибо. Реализовал класс "курсор консоли". В нем использовал мьютекс и выводил инфу через объекты класса. Вышло как дополнительная каретка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class type>
Cursor &Cursor::Out(type out)
{   
    WaitForSingleObject(Mutex,INFINITE);
    pos.X = bi.dwCursorPosition.X;
    pos.Y = bi.dwCursorPosition.Y; 
    SetConsoleCursorPosition(h,pos);
    cout<<out;
    GetConsoleScreenBufferInfo(h, &bi);
    ReleaseMutex(Mutex);
    return *this;
}
Yandex
Объявления
19.02.2012, 17:22     Дополнительная "каретка" консоли
Ответ Создать тему
Опции темы

Текущее время: 12:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru