Время на выполнение функции - C++

я делаю мультиплеерную игру, и проблема заключается в том, что люди с большим пингом тормозят ход её выполнения. Мне нужен способ, задать на определенную функцию (в моем случае получение пакета от игрока) Время выполнения, и если она выполняется дольше этого времени - прервать её. Как я могу реализовать это?


Ответы (1 шт):

Автор решения: gbg

У вас три варианта:

1. Сделать сокет асинхронным:

int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);

После этого, функции чтения / записи будут возвращать отрицательное число, если чтение в данный момент невозможно, а errno будет выставлено в EAGAIN

  1. Перед чтением проверять при помощи poll/select, готовы ли данные. Причем эти функции позволяют задать период ожидания и следить сразу за массивом сокетов. Советую выбрать этот вариант.

  2. Разово сделать операцию recv асинхронной - добавить флаг MSG_DONTWAIT - поведение будет аналогично варианту 1.

Учебник, где все это разобрано, выглядит вот так:

введите сюда описание изображениявведите сюда описание изображения

→ Ссылка