Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Параллельная обработка данных С++ [Решено при помощи GUI]  (Прочитано 1976 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Имеется цикл:
Код: (cpp) [Выделить]
while(true)
      {
            if (kbhit())
            {
                  playerStep(getch()); 
                  clear_scr();
            }
            iskIn();
            clear_scr();
            printInterFace();
            time_s(0.1);
      }
Проблема вот в чём: Положение на карте бота должно меняться в зависимости от времени, а положение игрока в зависимости от нажатия клавиши. Как сделать так, что бы оба эти процесса происходили параллельно?
« Последнее редактирование: 17 Июня 2015, 18:17:34 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #1 : 15 Июня 2015, 23:05:29 »
Гриб_под_зонтом, в консоли делаешь? Не проще в гуи?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #2 : 15 Июня 2015, 23:24:58 »
alsoijw,
Были у меня попытки подключить openGl , но они закончились провалом.
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #3 : 16 Июня 2015, 02:40:47 »
Параллельно это как?

В одном из простых вариантов реализации игры делается примерно так. Создаётся главный цикл. Цикл запускает две функции: обновление данных и отрисовка кадра по этим данным. Каждый проход называется фреймом (Frame). За секунду цикл проходит по кругу несколько раз. Разница во времени между фреймами разное, поэтому необходим расчёт deltatime (хранящее или получающее время, прошедшее с последнего фрейма), которое используется при обновлении данных. Обновление данных также разветвляется на несколько функций, такие как обновление данных с контроллеров, обновление игровых данных и т.д. т.п. Одна из функций занимается тем, что вызывает у перемещаемых объектов (ботов и персонажа игрока) функции обновления положения (координат).

Боты и персонаж игрока перемещаются в зависимости от:
  • deltatime (времени, прошедшего с последнего обновления перемещения);
  • направления движения;
  • расстояния за единицу времени.
Например так:

Код: (cpp) [Выделить]
// если нажата кнопка вперёд
if(is_key_forvard_pressed) {
  // direction меняется для направления вперёд
}

// если нажата кнопка вправо
if(is_key_right_pressed) {
  // direction меняется для направления вправо
}

// изменение положения
if(is_move_active) {
  location += direction * distance_per_sec * deltatime;
}

Распараллеливание выполнения некоторых процессов на потоки возможно, когда доступ к некоторым данным может иметь только один поток. Так, например, сначала изменяются данные для отрисовки и отправляются на отрисовку. Пока в одном потоке происходит отрисовка, в другом потоке подготавливаются новые данные для следующей отрисовки.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #4 : 16 Июня 2015, 13:18:06 »
Гриб_под_зонтом, журнал попыток в студию. Можно взять sdl.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #5 : 16 Июня 2015, 16:13:37 »
unimix, В цикле который выложен выше всё так и сделано, но данные считываются с клавиатуры только некоторое короткое время, а мне нужно что бы считывалось постоянно.alsoijw, GUI именно это проблему не решит, но всё же давно хотел настроить, итак вот проблема: устанавливаю либы по инструкции, libext-dev не находит в стандартных репах соответственно не устанавливается.
Если ввести простой код , то конечно при компиляции вылезет дофига ошибок
g++ -Wall -o "OpenGL" "OpenGL.cpp" (в каталоге: /home/user/Исходники/C++/Programs)
/tmp/ccASRdDs.o: In function `display()':
OpenGL.cpp:(.text+0xe): undefined reference to `glClear'
OpenGL.cpp:(.text+0x1a): undefined reference to `glBegin'
OpenGL.cpp:(.text+0x39): undefined reference to `glColor3f'
OpenGL.cpp:(.text+0x4f): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0x65): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0x84): undefined reference to `glColor3f'
OpenGL.cpp:(.text+0x9a): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0xb0): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0xcf): undefined reference to `glColor3f'
OpenGL.cpp:(.text+0xe5): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0xfb): undefined reference to `glVertex2f'
OpenGL.cpp:(.text+0x100): undefined reference to `glEnd'
OpenGL.cpp:(.text+0x105): undefined reference to `glFlush'
/tmp/ccASRdDs.o: In function `main':
OpenGL.cpp:(.text+0x122): undefined reference to `glutInit'
OpenGL.cpp:(.text+0x12e): undefined reference to `glutInitDisplayMode'
OpenGL.cpp:(.text+0x142): undefined reference to `glutInitWindowSize'
OpenGL.cpp:(.text+0x156): undefined reference to `glutInitWindowPosition'
OpenGL.cpp:(.text+0x162): undefined reference to `glutCreateWindow'
OpenGL.cpp:(.text+0x18a): undefined reference to `glClearColor'
OpenGL.cpp:(.text+0x196): undefined reference to `glMatrixMode'
OpenGL.cpp:(.text+0x19b): undefined reference to `glLoadIdentity'
OpenGL.cpp:(.text+0x1c5): undefined reference to `glOrtho'
OpenGL.cpp:(.text+0x1d1): undefined reference to `glutDisplayFunc'
OpenGL.cpp:(.text+0x1d6): undefined reference to `glutMainLoop'
collect2: error: ld returned 1 exit status
Сборка завершилась с ошибкой.
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #6 : 16 Июня 2015, 16:45:46 »
Гриб_под_зонтом, gui решит как раз эту проблему. OpenGL ни разу не использовал, я несколько раз использовал sdl. Тебе ведь хватит двумерной графики?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #7 : 16 Июня 2015, 16:50:10 »
alsoijw,
Двухмерной хватит с головой, а sdl под с++ запилен? Я просто не в курсе.  И кстати, как гуи решит данную проблему?
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #8 : 16 Июня 2015, 17:13:57 »
а sdl под с++ запилен?
Гугл/яндекс/ТвоёЛюбимое изобретён.
И кстати, как гуи решит данную проблему?
псевдокод
цикл перерисовка
   перемещение и прорисовка бота
   прорисовка игрока

событие нажатие клавиши
   изменение координат персонажа
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #9 : 16 Июня 2015, 17:56:10 »
alsoijw,
Установил SDL, но не нашёл подходящих уроков по нему. Кинешь ссылочки?
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн SkinnyJack

  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #10 : 16 Июня 2015, 18:17:42 »
http://lazyfoo.net/SDL_tutorials/

Консоль - не место для интерактивных игр, ящитаю.

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #11 : 16 Июня 2015, 19:05:16 »
alsoijw,
Попробовал скомпилить SDL. Вот код:
(Нажмите, чтобы показать/скрыть)
А вот ошибки, которые очень похожи на те, что были в OpenGL:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 16 Июня 2015, 19:09:00 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #12 : 16 Июня 2015, 19:12:39 »
Гриб_под_зонтом, пакеты для разработки ставил?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #13 : 16 Июня 2015, 19:30:21 »
alsoijw,
Какие именно?


Пользователь решил продолжить мысль 16 Июня 2015, 20:00:03:
Я установил libsdl1.2-dev
« Последнее редактирование: 16 Июня 2015, 20:00:03 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн Delit

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Паралелльная обработка данных С++
« Ответ #14 : 16 Июня 2015, 20:36:50 »
Цитировать
g++ -Wall -o "OpenGL" "OpenGL.cpp"
Если это команда компиляции то не хватает подключения либ, как минимум -lX11 -lGL
Подключение OpenGL в linux не многим сложнее чем в windows, хотя есть свои замарочки и нюансы.

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.