![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Пишу прогу, в которой надо по истечении недели вызывать функцию, которая шлет широковещательные пакеты.
Но проблема в том, что в функцию signal нельзя поместить обработчик сигнала с несколькими разными аргументами, т.к. по определению она содержит только один целочисл. аргумент. Мне же надо в функцию записать несколько разных аргументов : структуры адресов сокета, длины, переменные типа char .... Что же делать? ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
использовать: sleep, usleep, nanosleep, например.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Elyad
в обработчике вообще не рекомендуется заниматься такой работой создай поток, там реализуй ожидание (alarm/seiitimer + sigwait/sigsuspend/pause; sleep) сразу после передачи управления вызывай свою функцию в основной программе соответственно будут основные действия программы -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Я пишу под FreeBSD, а там потоков нет!!!
А в общем я решил проблему так: // все переменные необходимые для функции обьявлены как глобальные void func(int i) { my_funcion(...здесь введены все необходимые мне параметры); } alarm(604800); // передача сигнала 1 раз в неделю, работает демон signal(SIGALRM, &func); ![]() Ну вроде бы и все. Если кто придумает более оптимальное решение - пишите!!! ![]() |
|||
|
||||
MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
не забудь глобальные переменные сделать типом sig_atomic_t
ну процессы то везде есть. В Linux-е вон тоже отдельного понятия потока не существует
процесс будет простаивать конечно, но это не особо расточительно имхо, этот вариант лучше обработчика -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
kondr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.11.2005 Репутация: нет Всего: 1 |
???? Что правда что ли? ![]() На сколько я знаю, много вэб серверов крутится на FreeBSD. Так че они однопоточные? Что-то не верится... Это сообщение отредактировал(а) kondr - 16.10.2006, 16:49 |
|||
|
||||
Elyad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Открой книгу Стивенса У.Р. "Сетевое программирование" где черному по белому написано, что FreeBSD НЕ ПОДДЕРЖИВАЕТ ПОТОКИ.
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Интересно, а это тогда о чем? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |