многопоточный объектно-ориентированный код сокета с тайм-аутом - PullRequest
0 голосов
/ 17 июня 2011

У нас есть хороший класс, который устанавливает соединение с сокетом, а затем повторно обращается к нему. Если время ожидания истекло, мы хотим сгенерировать исключение.

То, что я хотел бы, это независимый тайм-аут для каждого объекта. Однако, как отмечалось в других сообщениях, код тайм-аута переносимого сокета отсутствует.

Таймаут сокета в C ++ Linux

В настоящее время я делаю это с сигналом, но это ужасно, потому что есть одна глобальная переменная, которая указывает на текущий объект. Это означает, что этот код не может быть многопоточным.

Есть ли способ установить таймер для каждого потока, чтобы каждый объект мог работать в своем собственном потоке? Это кажется самым чистым способом. Я мог бы построить очередь так, чтобы они все ждали в критической секции, но это очень уродливо и может повлиять на производительность многопоточности (а я в любом случае не хочу).

1 Ответ

1 голос
/ 17 июня 2011

Вы можете сделать это с помощью асинхронного ввода-вывода.Например, используя libevent или asio.Просто запустите операцию чтения и таймер в одном потоке диспетчеризации (служба ввода / вывода).

...