Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 6 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Привет всем.
Вот при написании сетевого геймплея возникла проблемка:
Недостаток был замечен на двух протоколах UDP и TCP.
Если на одном компе fps будет допустим в два раза больше чем
на другом, соответственно циклы игры будут отставать тоже в два раза.
И число пакетов принятых и посланных тоже будет разное.
Соответственно комп на котором больше fps пошлет два пакета за
какуюто еденицу времени, а за это же время второй комп с малым fps
сможет принять только один пакет.
И так появляется конкретное запаздывание !
Как от этого избавляться ?
Каким образом убрать эту 'очередь' пакетов ?

Пробовал таким образом задавать такие параметры:
unsigned long flag = true;
ioctlsocket(socket, FIONBIO, &flag);
- но не помогает.

И это на обоих видах сокетов ( TCP & UDP )

Название темы изменено. vor



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ну вообщето посылкой сообщений должен зханимать не тот пототк где идет отрисовка, а совершенно отдельный, который должен при любой скороси прорисовки, отсылать данные с постоянной скоростью, точнее через строго определенные промежутки времени.
Другое вариант, сервер обязан следить за поступлением данных и откидывать лишние если они пришли слишком рано, но это кривоватый вариант.


 

Ray Adams писал(а):
Ну вообщето посылкой сообщений должен зханимать не тот пототк где идет отрисовка, а совершенно отдельный, который должен при любой скороси прорисовки, отсылать данные с постоянной скоростью, точнее через строго определенные промежутки времени.
Другое вариант, сервер обязан следить за поступлением данных и откидывать лишние если они пришли слишком рано, но это кривоватый вариант.


А расскажика плз. поподробнее про отдельные потоки.
Что нужно два потока создавать ?


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Хммм, а ты игру сам писал то? С поттоками (threads) знаком или нет? Я не могу тебе обьяснит как все это сделать, так как я не знаю как работает сама игра. Ведь вариантов реализации может быть миллион :)


 

Такс... Я делал это под линух, но везде принципы одинаковы. Кстати юзал SDL, в принципе она и под винду есть, так что вообще халява. Короче чем-то типа create_thread создаёшь новую нить выполнения. Ну это типа новая функция, которая работает параллельно с твоей программой, то есть практически как новый процесс. Ну и чё, проблема может возникнуть только при передачи данных из сетевого треда, твоему основному треду. Например ты просчитываешь столкновение своего игрока и сетевого, просчитал - и вот готов рисовать кадр на экран, а тут опа пришёл новый пакет, с новым положением сетевого игрока, и получается твой просчёт был неверен. Это решается с помощью локов... Как там в SDL они назывались не помню, помню что в ядре линуха, когда под SMP програмишь это mutex-ами называлось (mutual exclusion). Фишка, чтобы доступ к данным мог только в какой-то момент времени получать только один тред или процесс, ну а для SMP один процессор :)


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
TeCTeP Это можно назват и по другому, должна быть четкая синхронизация при доступе к данным из разных потоков. как реализовать это уже на усмотрении программиста, но если один поток сейчас что-то делает, второй не должен получиться досутп к данным, пока первый не закончит. Под Windows через теже мутексы и WaitForSingleObject это решается запросто.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 6 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan