LINUX.ORG.RU

Треды и таймауты


0

0

Как програмируя на тредах сетевое многопоточное
приложение реализовывать тайм ауты например на такие вызовы
как connect, recv и т.д.
Используя процессы делал с помощью сигналов SIGALARM в часности
но в случае с тредами процес то один... как тут быть ?

anonymous

1. Можно все сделать через Non blocking API.
2. Select или poll.
3. SIGALARM тоже катит, только немного больше возни (посмотри pthread_kill).

zaz ★★★★
()
Ответ на: комментарий от zaz

1
Да Non blocking согласен, только тогда вобще
проще нафиг без тредов делать :)
В моем случае в общем не катит :)
2
Прикол в том что у меня часто пользуется recv(... MGS_WAITALL)
и как бы инфы о том что что-то дернуло дескриптор недостаточно
мне надо рубануть если там за какое-то время не успело
определенный кусок данных словить\пердать...
3
У меня тысячи потоков.. И прикол то в том что все они ставят
свои алармы... поэтому либо я не догнал сути, либо опятьже
не покатит для меня.....
----
PS Все равно спасибо за ответ

anonymous
()
Ответ на: комментарий от anonymous

Нет, алармы не покатят точно. Поправьте меня, если я гоню, но треды
шарят обработчик, так что "свои алармы" обрабатывать не получится.

jek_
()
Ответ на: комментарий от anonymous

Запускаешь еще один поток для генерации SIGALARM, добавляешь в него таски а он дергает pthread_kill.

zaz ★★★★
()
Ответ на: комментарий от zaz

Хорошо
но я не догоняю, как мне понять что сигнал
пришел именно этому треду ?
это проблем нумбер оне
как мне ставить алармы если у меня
один тред проставил, и до того как этот аларм истек
еще 3к тредов хотят свои алармы поставить
это проблем нумбер ту
-----
сегодня в время написания другой проги с пользованием libcurl
наткнулся в доках что типа курл умеет таймауты без аларма делать
счас сырцы покачаю посмотрю как там сделано, мот чего нового узнаю :)

anonymous
()
Ответ на: комментарий от anonymous

ПОВТОРЯЮ ЕЩЕ РАЗ: pthread_kill
man pthread_kill
....
int pthread_kill(pthread_t thread, int signo);
....
pthread_kill send signal number signo to the thread thread ....

zaz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.