![]() |
|
Модераторы: feodorv |
![]()
|
|
| SuperYES |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.6.2007 Репутация: нет Всего: нет |
Такой вопрос: Какие 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 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.6.2007 Репутация: нет Всего: нет |
Я немного покапался и нашел функцию pselect, которая дополнительно принимает список сигналов.
Вопрос знатокам C++, как ее использовать? Есть ли аналогия этой функции для windows? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |