crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> boost::interprocess, Я мало травы выкурил чтобы это понять?
alexy
  опции профиля:
сообщение 23.2.2013, 0:23
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 4.8.2010
Пользователь №: 1931

Спасибо сказали: 0 раз(а)




Репутация:   0  


Создаю я значит класс, который можно вызывать из разных процессов, типа

using namespace boost::interprocess;

class foo {
public:
  std::string bar()const{
     shared_lock<interprocess_upgradable_mutex> lock(mutex);
     // get the data;
     return data;
   }
  void bar(const std::string& nb){
     scoped_lock<interprocess_upgradable_mutex> lock(mutex);
     //write the data
  }

private:
  static interprocess_upgradable_mutex mutex;
};
// определяю mutex в cpp файле


У меня вываливается (еще до вызова конструктра, даже заблокировать-то еще не успел ничего)
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost::lock_error


Может я не правильно библиотеку использую?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
alexy
  опции профиля:
сообщение 23.2.2013, 11:30
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 4.8.2010
Пользователь №: 1931

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я чувствую себя не нужным осадком у компа: закоментировал все упоминания о мутаксах, даже заголовочные файлы, а ему все равно, тажк ошибка :)

Это мне нужно для веб сервера. Делаю приложение используя wt (http://www.webtoolkit.eu). нужно сделать возможность настройки некоторых особенностей приложения. наример если на site.com/forum работает форум, то на site.com/admin должно стоять приложение, позволяющие администрировать форум. проблема в том, что админов может быть несколько, работать они могут отновременно, да еще и одновременно с пользователями. вот я и думаю в таком смысле: есть класс гуя (admin_gui), который отвечает только за внешниий вид. есть классы менеджеров объектов, которые позволяют настраивать объекты и гуй от них наследуется (class admin_gui : public foo_manager, public ather_foo_manager...).

class guard{
public:
   guard(bool& flag) : flag_(flag) {flag_=true;}
   ~guard() {flag_=false;}
private:
  bool& flag_;
};

class foo_manager{
public:
  foo_manager(){
    namespace pl = std::placeholders;
    bar_connection = bar_sign.connect(std::bind(&foo_manager::on_bar_changed, this, pl::_1, pl::_2));
  }
  ~foo_manager(){
    bar_connection.disconnect();
  }
  int bar()const{return bar_;}
  void bar(const int& n){
      bar_ = n;
      guard g(bar_flag);
      bar_sign();
  }
  virtual foo_bar_changed(int old, int n)=0;
private:
  typedef boost::signals2::signal<void (int, int)> bar_signal;
  static bar_signal bar_sign;
  
  void on_bar_changed(int o, int n){
       if(bar_flag) return;
       bar_ = n;
       foo_bar_changed(o, n);
  }

  boost::signals2::connection bar_connection;

  int bar_; bool bar_flag;
};


Вот сюда и надо добавить синхронизацию, чтобы если он пишет, то не читал в этот момет, и писал по очереде.

Такой метод гуд, или ересь и есть решения лучше?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 18:21