Страниц: [1]
  Печать  
Автор Тема: Виртуальный прокси и таймер не работают  (Прочитано 2744 раз)
roozu
Участник
*
Offline Offline

Сообщений: 1


Просмотр профиля
« : Марта 28, 2013, 01:37:38 pm »

Нужно сделать программу, которая будет посылать прокси на удаленные узлы через заданные промежутки времени.
Пробовал реализовать это с подошью виртуальных прокси и таймеров, но не работает,подскажите я где-то допустил ошибку или таймеры с виртуальными прокси не работают.

Код сервера:
#include <sys/proxy.h>
#include <signal.h>
#include <time.h>
#include <sys/kernel.h>
#include <unistd.h>
#include <assert.h>
#include <iostream>

int main()
{
   //создается прокси
   int proxy = qnx_proxy_attach(0, NULL, 0, -1);
   cout << "local proxy: " << proxy << endl;
   //создается виртуальный прокси на третьем узле
   int vproxy = qnx_proxy_rem_attach(3, proxy);
   cout << "global proxy: " << vproxy << endl;
   assert(vproxy != -1);
   while(1)
   {
      //получаем сообщение
      pid_t cli_pid = Receive(0, NULL, 0);
      cout << "get msg form: " << cli_pid << endl;
   }
   return 0;
}

код клиента:
#include <sys/proxy.h>
#include <signal.h>
#include <time.h>
#include <sys/kernel.h>
#include <sys/types.h>
#include <unistd.h>
#include <assert.h>
#include <iostream>

int main()
{
   int vproxy;
   cout << "enter vproxy: ";
   //вводим виртуальный идентификатор
   cin >> vproxy;
   cout << endl;
   //отправляем прокси через триггер (всегда доходит)
   Trigger(vproxy);
   //создаем таймер, который срабатывает каждую секунду
   timer_t id, i;
   struct itimerspec timer;
   struct sigevent event;
   event.sigev_signo = -vproxy;
   id = timer_create(CLOCK_REALTIME, &event);
   assert(id != -1);
   timer.it_value.tv_sec = 1L;
   timer.it_value.tv_nsec = 0L;
   timer.it_interval.tv_sec = 1L;
   timer.it_interval.tv_nsec = 0L;
   //запускаем таймер
   int err_stat = timer_settime(id, 0, &timer, NULL);
   assert(err_stat != -1);
   sleep(60);
   return 0;
}

Если и сервер и клиент запускаются на одном узле, все работает как надо, если же на разных, то прокси отправляется только по вызову функции Trigger(). Неужели таймер отправляет прокси не через тот же триггер?
Записан
Страниц: [1]
  Печать  
 
Перейти в: