Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2016, 02:08   #1
Chronny
Новичок
Джуниор
 
Регистрация: 25.09.2016
Сообщений: 2
По умолчанию Помогите найти оптимальный вариант!

Все привет!

Руководство поставило задачу: написать программу массового обзвона сотрудников предприятия при чрезвычайных ситуациях. Из того что есть - это SIP-сервер, и в интернете нарыл компонент GTSIPAPI, который может обращаться к этому серверу и проигрывать звуковой файл абонентам.

Админ SIP-сервера выделил 30 свободных каналов для обзвона, то есть одновременно можно обзванивать 30 абонентов. Абонентов с их номерами я циклом тяну из базы данных. Если абонентов до 30 или ровно 30, тот тут проблем нет, все просто: я беру по одному абоненту из базы и по каждому каналу пускаю. Но если абонентов больше 30, начинаются проблемы. Нужно задачу реализовать так, чтобы цикл выдачи абонентов приостанавливался тогда, когда все каналы заняты, и запускался, когда какой-нибудь канал освобождался, и направлял туда нового абонента.

Мне рекомендовали воспользоваться в решении проблемы потоками и синхронизацией, но пока не знаю куда копать в этом направлении.

Заранее спасибо.
Chronny вне форума Ответить с цитированием
Старый 25.09.2016, 02:19   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вам нужна очередь и 30 воркеров, которые будут брать номер из очереди и звонить.
все просто.

в некоторых языках такое есть в коробке, в некоторых нужно чуть подшаманить
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.09.2016, 03:08   #3
Chronny
Новичок
Джуниор
 
Регистрация: 25.09.2016
Сообщений: 2
По умолчанию

Ну очередь, я так полагаю, формируется из базы абонентов... А что такое воркеры?
Chronny вне форума Ответить с цитированием
Старый 25.09.2016, 04:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

те кто будет пробовать взять данные из очереди.
потоки те самые, по сути они должны работать пока есть элементы в очереди.

Код:
while(queue.TryDeque(out number))
  DoVoiceCall(number);
как-то так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.09.2016, 08:34   #5
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Мало вводных. Но для вашей цели идеально подходит такой объект синхронизации как семафор. https://ru.wikipedia.org/wiki/%D0%A1...B8%D0%BA%D0%B0) Он реализован во всех ОС, во всех АПИ. Нужно задать значение счетчика равное 30
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите оптимальный вариант, для заливки программы с целью раздачи клиентам Dennis777 Свободное общение 18 10.01.2015 15:57
оптимальный вариант ПК для просмотра видео высокого качества, работа с большими базами данных (техн. характеристики) carrie bradshaw Помощь студентам 8 26.03.2014 23:15
Потоки. Оптимальный вариант реализации gusluk Общие вопросы Delphi 33 06.06.2012 02:33
нужно найти оптимальный путь Marina87 Фриланс 16 29.04.2010 16:01
найти оптимальный план производства Baxxter Microsoft Office Excel 12 25.09.2008 23:45