![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Есть цикл он выполяняеться до тех пор пока булевская переменная не приймет значение true. Суть вопроса - в цыкле стоит ожидание accept от сокета, но в какой-то момент времени пользователь может захоткть грохнуть сервер, а он стоит в режиме ожидания соеденения в цыкле, как быть-то? -------------------- Never again... |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Nuzur, каждую итерацию(или не каждую, это уже мелочи ) цикла опрашивай ввод пользователя, если конечно сервер нельзя грохнуть просто нажав "Х".
|
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
Если я правильно понял вопрос, делайте ассинхронные сокеты:
см. API: WSAAsyncSelect() ioctlsocket() Или делайте многопоточное приложение: в одном потоке выполняйте обработку пользовательских событий, а в другом - работайте с сокетами. --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Daevaorn, Каждую итерацию я и буду проверять но проблема то в том что пока сервер ждет клиента он будет его ждать а не проверять что-то там. А если клиент не будет подключаться несколько дней что ему весеть-то? А такое вполне возможно.
adonin, Сервер клиент уже сделаны и ОЧЕНЬ не хочеться там что-то менять, может есть другой способ-то? А про многопоточное да оно уже и так многопотоное. Делая его еще многопоточнее... ну прийдеться конечно наверно... ![]() Ладно, может оффтоп уже но тема то незакончена, как потом грамотно поток обрубить когда пойму что время пришло? -------------------- Never again... |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
грамотно - это когдапоток сам завершится, так что по твоему алгоритму - проверять из потока флаг остановки. Все способы грохнутьпоток извне считаются некорректными. А если у тебя клиент бесконечно ждет подключения,то это поумолчанию неправильно. Надо делать отдельные попытки подключиться, которые должны ограничиваться по времени. Между этими попытками и проверяй флаг остановки. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Только лучше не флаг, а событие... И не проверять, а ждать (WaitForMultipleObjects): пришел один хандл - что-то делаем, пришел другой - завершаемся.
-------------------- ... |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Nuzur
Используя fcntl (fcntl.h) устанавливаешь на дескриптор соединения флаг O_NONBLOCK. После этого accept завершается сразу после вызова либо с установкой соединения, либо с кодом errno=EAGAIN (повторите позже)... Можно использовать select (unistd.h) для ожидания с таймаутом. На сколько я знаю, в Windows что-то очень похожее. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |