| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Потоки ввода/вывода select |
| Автор: SuperYES 4.2.2008, 18:56 |
| Такой вопрос: Какие I/O потоки кроме сокетов можно использовать в функции select? Проблема следующая (лаконичней не вышло): У меня есть сервер многопоточный, в каждом потоке стоит select. Если например количество клиентов подключенных к выбранному потоку меньше 20например, то в список select добавляю listen socket, т.е. если поток не до конца забит клиентами то он может принимать еще клиентов. Если добавляется 20й клиент то убираю из селекта listen socket и создаю новый поток пустой в селекте которого установлен только listen socket. Если кто-то из забитого потока отключается, то ему сразу в select добавляется listen socket. В результате происходит следующее, почти всегда listen сокет указан в нескольких потоках т.к. постоянно кто-то подключается, кто-то отключается и при получении accept запроса все потоки где в селекте есть listen socket активируются. Хоть там кусок кода и синхронизирован т.е. только один из потоков подключит нового клиента, но происходит много лишних действий программы. Дальше почесав корку я сделал отдельный поток для listen сокета и хотел заменить во вех селектах Listen socket на какой-нить локальный I/O stream для каждого потока, тут и застрял. В итоге должно быть так: при приеме сообщения accept не активируются все потоки, а активируется один поток, из списка не забитых потоков. А активировался бы он передачей в I/O stream чего-нибудь. Вопрос как делать свои потоки не привязанные к сокетам, что-то типа отображаемых файлов в память, и главное чтоб эти потоки были понятны функции select? Отпешите кто-что знает. |
| Автор: SuperYES 5.2.2008, 04:19 |
| Я немного покапался и нашел функцию pselect, которая дополнительно принимает список сигналов. Вопрос знатокам C++, как ее использовать? Есть ли аналогия этой функции для windows? |