Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 06.12.2009, 14:36   #1
MInner
Новичок
Джуниор
 
Регистрация: 06.12.2009
Сообщений: 2
По умолчанию Boost (asio + thread) - noncopyable

Код:
#include <iostream>

#include <boost/thread/thread.hpp>
#include <boost/threadpool.hpp>
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp> 


class Connecter {
public:
	typedef boost::shared_ptr<Connecter> ConPtr;
private:
	boost::asio::io_service t_io;
	boost::asio::ip::tcp::socket _sock;
	Connecter(boost::asio::io_service& ios) : t_io(ios), _sock(ios) {}
	boost::asio::streambuf _inbuffer;
public:
	static ConPtr givePtr(boost::asio::io_service& io){ return ConPtr(new Connecter(io)); }
	boost::asio::ip::tcp::socket Socket(){return _sock;}
	void Read(){ // we do, what we want...
		boost::asio::read_until(_sock, _inbuffer, "\r\n\r\n" );
	}
	void Analys(){};
};

class PortListner {
	boost::asio::ip::tcp::acceptor p_acc;
	boost::asio::io_service p_io;
	boost::threadpool::pool _pool;
	Connecter::ConPtr _cur_con;

	void WaitForPromt(){ //waits till something happens
		p_acc.async_accept(_cur_con->Socket(), boost::bind(&PortListner::ThreadOut, this, boost::asio::placeholders::error));
	}

	void ThreadOut(boost::system::error_code& e){ //hey! there's something there!
		if (!e){
			_pool.schedule(boost::bind(&Connecter::Read , _cur_con)); //put it into it's own way... 
			_cur_con = Connecter::givePtr(p_io);
			WaitForPromt();
		}
	}
public:
		PortListner(int port, int thnum):_pool(thnum), p_acc(p_io) {}
};

int pulnum = 5;
int portnum = 80;

int main(){
	PortListner(portnum, pulnum);
	return 0;
}

ргается мол:

error C2248: boost::noncopyable_::noncopyable::n oncopyable: невозможно обратиться к private член, объявленному в классе "boost::noncopyable_::noncopyab le" d:\dv\boost\include\boost\boost\asi o\io_service.hpp 519


вроде не копирую его же ж...

Последний раз редактировалось Sazary; 07.12.2009 в 00:57.
MInner вне форума Ответить с цитированием
Старый 06.12.2009, 17:41   #2
MInner
Новичок
Джуниор
 
Регистрация: 06.12.2009
Сообщений: 2
По умолчанию

Еще прару блох нашел, компилируется, но теперь вылетает с исключением "Нарушение прав доступа при чтении" в создании критических секций в win_mutex.hpp ....
MInner вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Thread.Приложение не отвечает. Не запускается поток. Zerofill Общие вопросы Delphi 2 10.10.2009 16:04
Проблема с Thread Arnezami Общие вопросы .NET 2 04.10.2009 22:08
Thread creation error - Недостаточно памяти RealSwift Общие вопросы Delphi 1 06.07.2008 12:27
Запрос к БД в отдельном потоке (Thread) tyrell lab БД в Delphi 1 14.06.2007 08:42


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS