Время на выполнение функции - C++
я делаю мультиплеерную игру, и проблема заключается в том, что люди с большим пингом тормозят ход её выполнения. Мне нужен способ, задать на определенную функцию (в моем случае получение пакета от игрока) Время выполнения, и если она выполняется дольше этого времени - прервать её. Как я могу реализовать это?
Ответы (1 шт):
У вас три варианта:
1. Сделать сокет асинхронным:
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
После этого, функции чтения / записи будут возвращать отрицательное число, если чтение в данный момент невозможно, а errno будет выставлено в EAGAIN
Перед чтением проверять при помощи
poll/select, готовы ли данные. Причем эти функции позволяют задать период ожидания и следить сразу за массивом сокетов. Советую выбрать этот вариант.Разово сделать операцию
recvасинхронной - добавить флагMSG_DONTWAIT- поведение будет аналогично варианту 1.
Учебник, где все это разобрано, выглядит вот так:

