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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Управление скоростью отправки сообщений, Сетевое программирование 
:(
    Опции темы
max0257
Дата 30.10.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте,

В своем сетевом приложении хочу организовать управление количеством отправляемых по TCP-соединению сообщений. Я пробовал использовать разделяемую переменную с таймером, который ее обнулял, но получилась ерунда.  У кого-нибудь есть идея как это сделать правильно?
PM MAIL   Вверх
_hunter
Дата 30.10.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



не совсем прнятно что такое 
Цитата(max0257 @  30.10.2006,  11:59 Найти цитируемый пост)
 разделяемую переменную с таймером, который ее обнулял

и для чего это...
но идея с таймером вполне нормальная.

P.S.
что эта тема делаей в этом разделе?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
max0257
Дата 30.10.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Смысл следющий - клиент по TCP соединяется с сервером и отсылает на него бинарные сообщения. Я пытался организовать отправку с контролем скорости следующим образом - один объект содержит счетчик и таймер, который раз в секунду обнуляет его. Поток, который пишет в соединение каждый раз проверяет число счетчика, если оно небольше чем максимально допустимое, то сообщение отправляеться и счетчик увеличивается на 1. Соответственно таймер тикает раз в секунду и сбрасывает счетчик в ноль. Может существует алгоритм, который организует это проще?

<code>
class CGauge: public ACE_Event_Handler
{
public:
    CGauge();
    virtual ~CGauge();
    void Nullize();
    int handle_timeout(const ACE_Time_Value& tv,const void *arg = 0);
    void Inc();
    int GetCnt();
private:
    int _cnt ;
    ACE_Thread_Mutex _nullize_mutex;

};

CGauge::CGauge()
{
    _cnt = 0 ;
    ACE_Time_Value tv (1, 0);
    ACE_Reactor::instance()->schedule_timer(this,0,tv,tv);
}

CGauge::~CGauge()
{
    ACE_Reactor::instance()->remove_handler(this,ACE_Event_Handler::DONT_CALL);
}

void CGauge::Nullize()
{
    _nullize_mutex.acquire();
    _cnt = 0;
    _nullize_mutex.release();
}

void CGauge::Inc()
{
    _nullize_mutex.acquire();
    ++_cnt;
    _nullize_mutex.release();
}


int CGauge::handle_timeout(const ACE_Time_Value& tv, const void *arg)
{
    //ACE_DEBUG((LM_DEBUG,"%T Gauge nullizing\n"));
    this->Nullize();
    return 0;
}

int CGauge::GetCnt()
{
    int r;
    _nullize_mutex.acquire();
    r = _cnt ;
    _nullize_mutex.release();
    return r ;
}

</code>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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