Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Как убить поток, послав ему сигнал? |
Автор: Dimonius 2.3.2007, 00:49 |
У меня есть программа сервер, которая при подключении клиента выделяет для каждого отдельный поток. И получается, что работа с каждым клиентом крутится в своем потоке. Надо прикрутить к этому обязательно сигналы. Есть идеи? Я хотел бы отключать клиента после некоторого времени бездействия. Например, если клиент ничего не делает (не присылает) в течение 10 минут, то сервер бы его отключал. Причем отключал корректно (закрыв соединение и убив поток, который обслуживает клиента). Есть мысля генерировать, какой-нибудь сигнал и отправлять его в поток, чтобы тот завершился. Но как это сделать???, не могу придумать. ![]() Еще работу с таймера надо наладить. Так как я не могу пользоваться alarm() и settimer() так как они пользуются одним и тем же таймером. Я имею ввиду, если один поток изменит значение таймера, то и для других потоков оно тоже изменится... а нужно, чтобы каждый поток имел свой таймер, по истечению которого поток бы закрывался. Ребята помогите, срочно нужно решение этой проблемы! |
Автор: MAKCim 2.3.2007, 16:42 |
1. Не использовать потоки (использовать процессы) 2. pthread_cancel() + pthread_setcancelstate()/pthread_setcanceltype() |
Автор: Dimonius 7.3.2007, 00:54 |
В линукс потоки работают как процессы. http://www.natahaus.ru/2006/02/19/programmirovanie_dlja_Linux.html А так, разобрался как работают сигналы. Вопрос решен. |
Автор: MAKCim 7.3.2007, 09:56 |
есть posixthreads и linuxthreads |
Автор: Ken 1.4.2007, 00:20 | ||
Если клиентские потоки не используют какие-нибудь общие данные в памяти, то лучше использовать процессы. Если один из потоков завершит работу аварийно (например, Segmentation fault), то завершится процесс с всеми другими потоками. В случае отдельных процессов все процессы работают изолированно и не влияют друг-другу и проблема с таймером тоже решится. |