![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Dimonius |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 11.10.2006 Репутация: нет Всего: 1 |
У меня есть программа сервер, которая при подключении клиента выделяет для каждого отдельный поток. И получается, что работа с каждым клиентом крутится в своем потоке. Надо прикрутить к этому обязательно сигналы. Есть идеи?
Я хотел бы отключать клиента после некоторого времени бездействия. Например, если клиент ничего не делает (не присылает) в течение 10 минут, то сервер бы его отключал. Причем отключал корректно (закрыв соединение и убив поток, который обслуживает клиента). Есть мысля генерировать, какой-нибудь сигнал и отправлять его в поток, чтобы тот завершился. Но как это сделать???, не могу придумать. ![]() Еще работу с таймера надо наладить. Так как я не могу пользоваться alarm() и settimer() так как они пользуются одним и тем же таймером. Я имею ввиду, если один поток изменит значение таймера, то и для других потоков оно тоже изменится... а нужно, чтобы каждый поток имел свой таймер, по истечению которого поток бы закрывался. Ребята помогите, срочно нужно решение этой проблемы! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
1. Не использовать потоки (использовать процессы) 2. pthread_cancel() + pthread_setcancelstate()/pthread_setcanceltype() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Dimonius |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 11.10.2006 Репутация: нет Всего: 1 |
В линукс потоки работают как процессы. Источник А так, разобрался как работают сигналы. Вопрос решен. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
есть posixthreads и linuxthreads -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Ken |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 31.3.2007 Репутация: нет Всего: 4 |
Если клиентские потоки не используют какие-нибудь общие данные в памяти, то лучше использовать процессы. Если один из потоков завершит работу аварийно (например, Segmentation fault), то завершится процесс с всеми другими потоками. В случае отдельных процессов все процессы работают изолированно и не влияют друг-другу и проблема с таймером тоже решится. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |