Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> signal 
V
    Опции темы
Elyad
Дата 13.10.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Пишу прогу, в которой надо по истечении недели вызывать функцию, которая шлет  широковещательные пакеты.
Но проблема в том, что в функцию signal нельзя поместить обработчик сигнала с несколькими разными аргументами, т.к. по определению она содержит только один целочисл. аргумент.
Мне же надо в функцию записать несколько разных аргументов : структуры адресов сокета, длины, переменные типа char ....
Что же делать?   
 smile 
PM MAIL   Вверх
bsa
Дата 13.10.2006, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



использовать: sleep, usleep, nanosleep, например.
PM   Вверх
MAKCim
Дата 13.10.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Elyad
в обработчике вообще не рекомендуется заниматься такой работой
создай поток, там реализуй ожидание
(alarm/seiitimer + sigwait/sigsuspend/pause; sleep)
сразу после передачи управления вызывай свою функцию
в основной программе соответственно будут основные действия программы


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Elyad
Дата 16.10.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Я пишу под FreeBSD, а там потоков нет!!!
А в общем я решил проблему так:
// все переменные необходимые для функции обьявлены как глобальные

void func(int i)
{
      my_funcion(...здесь введены все необходимые мне параметры);
}
alarm(604800);  // передача сигнала 1 раз в неделю, работает демон
signal(SIGALRM, &func);
 smile 
Ну вроде бы и все.
Если кто придумает более оптимальное решение  -  пишите!!! smile 
PM MAIL   Вверх
MAKCim
Дата 16.10.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

Ну вроде бы и все.

не забудь глобальные переменные сделать типом
sig_atomic_t
Цитата

Я пишу под FreeBSD, а там потоков нет!!!

ну процессы то везде есть. В Linux-е вон тоже отдельного понятия потока не существует
Цитата

Если кто придумает более оптимальное решение  -  пишите!!!

Код

...
pid_t pid = fork();

if (pid == 0) {
    sigset_t sigset;
    sigemptyset(&sigset);
    sigaddset(&sigset, SIGALRM);
    sigprocmask(SIG_BLOCK, &sigset);
    sigwait(&sigset, NULL);   /* ожидаем сигнала */
    function();  /* твоя функция */
}
...

процесс будет простаивать конечно, но это не особо расточительно
имхо, этот вариант лучше обработчика


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kondr
Дата 16.10.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.11.2005

Репутация: нет
Всего: 1



Цитата

Я пишу под FreeBSD, а там потоков нет!!!


????
Что правда что ли?   smile  Я из ЮНИКсов с Линухом и Аиксом работал. Там с потоками все в порядке. 

На сколько я знаю, много вэб серверов крутится на FreeBSD. Так че они однопоточные? Что-то не верится...

Это сообщение отредактировал(а) kondr - 16.10.2006, 16:49
PM MAIL   Вверх
Elyad
Дата 18.10.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Открой книгу Стивенса У.Р. "Сетевое программирование" где черному по белому написано, что FreeBSD НЕ ПОДДЕРЖИВАЕТ ПОТОКИ.  smile 
PM MAIL   Вверх
bsa
Дата 18.10.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(Elyad @ 18.10.2006,  15:34)
Открой книгу Стивенса У.Р. "Сетевое программирование" где черному по белому написано, что FreeBSD НЕ ПОДДЕРЖИВАЕТ ПОТОКИ.  smile

Интересно, а это тогда о чем?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.