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

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

Войти
Регистрация
Восстановить пароль
 
Bretbas
188 / 47 / 7
Регистрация: 05.08.2013
Сообщений: 742
Завершенные тесты: 1
#1

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

03.01.2014, 23:08. Просмотров 685. Ответов 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     Движение двух фигур в разных потоках
Посмотрите здесь:

2 цикла в разных потоках - C++
Здравствуйте! Научите! Как правильно делать &quot;что-то&quot; в отдельном фоновом потоке в C++. Пожалуйста код! К примеру: void...

Получить перемешанный вывод при работе в разных потоках - C++
В общем то, дело такое: о потоках до сего дня не знал, да и сейчас ничего не понимаю. Пишу, значит, код, как на харбе, чтобы убедиться, что...

C++ занесение структур находящихся в разных потоках, в общую очередь - C++
Весь код приводить не стал, надеюсь идея будет понятна. Я циклом создал потоки а теперь, нужно структуры (Clien), которые в этих потоках...

Движение фигур в C++ - C++
Нарисовать пульсирующий зеленый круг, увеличивающийся и уменьшающийся, программа завершается нажатием любой клавиши. Рисование фигуры...

HELP!!! движение геометрических фигур - C++
Нужна помощь в написании программы движения круга на экране хотя бы чтоб двигался туда сюда по одной линии, использование методов &quot;дров&quot; и...

Одинаковый id в двух потоках - C++
#include&lt;iostream&gt; #include&lt;thread&gt; using namespace std; class background_task { public: int l; background_task(int i)...

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

Безопасное использование вектора в двух потоках - C++
Это продолжение этой темы , но уже немного другая проблема. Работаю с классом , который создаёт объекты через shared_ptr и заносит их в...

Графические функции. Вывести на экран рисунок, состоящий из 6 разных геометрических фигур - C++
1)Вывести на экран рисунок, состоящий из 6 разных геометрических фигур. Фигуры выделить разными цветами и надписать.

Движение и скорость на разных отрезках пути - C++
Привет форумчане!, помогайте голова взрывается. Вопрос по механике движения тела по траэктории Суть: есть автомобиль едущий со...


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

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

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

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

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