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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bretbas
183 / 42 / 6
Регистрация: 05.08.2013
Сообщений: 694
Завершенные тесты: 1
#1

Движение двух фигур в разных потоках - C++

03.01.2014, 23:08. Просмотров 665. Ответов 2
Метки нет (Все метки)

Привет всем!всех с новым годом!и снова я к вам с моими проблемами)
короче пишу игрушку в консоле,столкнулся впервые с многопоточностью)использую стандартную библиотеку c++ <thread> для создания потоков и работы с ними.так же использую инициализацию графики в консоли с помощью библиотеки msoftcon.h.
Все бы хорошо,но есть одна проблема...как выразиться лучше то...мне нужно чтобы две фигуры на экране двигались независимо друг от друга...но суть в том,что установка курсора set_cursor_pos(x,y) не успевает нарисовать одну фигуру и переходит к другой резко...и получается полная хрень...вначале я не понимал в чем трабл,но когда написал вот такую скромную программку(ниже код),то понял что дело все в курсоре:
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
#include <iostream>
#include <thread>
#include "msoftcon.h"
 
void Thread()   
{
for(int i=1;i<25;i++)
{
set_cursor_pos(1,i);
wait(100);
std::cout<<"*";
}
}
 
void main()
{
init_grafics();
std::thread f(Thread);
 
for(int i=1;i<25;i++)
{
set_cursor_pos(80,i);
wait(50);
std::cout<<"+";
}
 
f.join();
}
Программка рисует по вертикали в дополнительном потоке слева с задержкой 100 миллисекунд символ "*" а в основном потоке по вертикале рисуется справа символ "+" с задержкой 50 миллисекунд и затем он ждет пока закончит выполнение дополнительный поток(f.join(); функция).вроде все просто и понятно)
но вот в чем проблема-символы вывода иногда находятся не в том месте где им нужно быть,к примеру иногда символ "*" находится справа,а символ "+" слева,хотя это не должно быть!я долго не думал,и понял что проблема с установкой курсора(set_cursor_pos(...); функция)...но вот как исправить я так и не догадался.мне нужно два курсора,чтобы один работал с дополнительным потоком,а другой с основным...но реально ли это в консоле на c++ или можно как нибудь сделать подругому все?
Ребята,срочно нужна ваша помощь...без этого не могу продвинуться(разбираюсь в winAPI не много,поэтому можете примеры решения подсказать на нем)

Добавлено через 23 часа 22 минуты
Аууу народ?мне кто нибудь поможет?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 23:08     Движение двух фигур в разных потоках
Посмотрите здесь:

C++ HELP!!! движение геометрических фигур
C++ Вывод двух фигур рядом
C++ Движение и скорость на разных отрезках пути
C++ занесение структур находящихся в разных потоках, в общую очередь C++
Графические функции. Вывести на экран рисунок, состоящий из 6 разных геометрических фигур C++
Движение фигур в C++ C++
C++ Безопасное использование вектора в двух потоках
C++ 2 цикла в разных потоках
Сложить объекты двух разных классов C++
C++ Одинаковый id в двух потоках
C++ Получить перемешанный вывод при работе в разных потоках
можно как то сравнить возвращаемые значения этими функциями(разнопотоковыми)? функции на разных потоках C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.01.2014, 00:55     Движение двух фигур в разных потоках #2
Задумайтесь немного. Потока 2, а консоль одна. Потоки между собой никак не синхронизированы, т.е. вполне возможна ситуация, когда один поток установил курсор, а другой начинает вывод. В итоге - вывод не там, где мы ожидали. Поэтому необходимо добавить один из механизмов синхронизации: мютекс, критическую секцию, семафор и т.п.
Bretbas
183 / 42 / 6
Регистрация: 05.08.2013
Сообщений: 694
Завершенные тесты: 1
07.01.2014, 14:02  [ТС]     Движение двух фигур в разных потоках #3
Спасибо за ответ,раньше уже нашел)использую библиотеку мьютекса <mutex> ,вроде все работает)

Добавлено через 23 часа 50 минут
А теперь у меня следующий вопрос...я начал использовать мьютекс в своей игре,но выгодно ли это?разделение данных у меня идет только при двух операциях - установки курсора(set_cursor_pos) и нарисования части фигуры(std::cout<<'o') и это происходит для прорисовки двух фигур одновременно в двух разных потоках в один и тот же промежуток времени.
Выгодно ли использовать мьютекс здесь,или посоветуете что нибудь более подходящее в этом случае?

Добавлено через 14 часов 44 минуты
Есть тут кто?)
Yandex
Объявления
07.01.2014, 14:02     Движение двух фигур в разных потоках
Ответ Создать тему
Опции темы

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