У меня есть одна проблема с моим сервером (на основе ASIO & подталкивания :: Thread)подталкивания :: Thread - поток создают проблемы
В строке:
this->connection->thread = boost::shared_ptr<boost::thread>(new boost::thread(worker, this->connection));
я получил ошибку:
Core/CCore.cpp: In member function 'void CCore::handle_accept(const boost::system::error_code&)':
Core/CCore.cpp:71:163: error: no matching function for call to 'bind(, CCore* const, boost::arg<1> (&)())'
Полный код ошибки: http://pastebin.com/PaftWzbx
определение CCore & акцептор:
class CCore
{
public:
CCore(boost::asio::io_service *io_service, const boost::asio::ip::tcp::endpoint &endpoint);
bool failed;
private:
void handle_accept(const boost::system::error_code& error);
boost::asio::io_service *io_service;
boost::asio::ip::tcp::endpoint endpoint;
boost::asio::ip::tcp::acceptor *acceptor;
boost::shared_ptr<CConnection> connection;
};
void CCore::handle_accept(const boost::system::error_code& error)
{
if (error) {
// accept failed
//LOG(ERROR, "Acceptor failed: " << error.message());
return;
}
//LOG(INFO, "Accepted connection from " << this->connection->endpoint.address().to_string() << ":" << this->connection->endpoint.port());
this->connection->thread = boost::shared_ptr<boost::thread>(new boost::thread(worker, this->connection));
this->connection = boost::shared_ptr<CConnection>(new CConnection());
this->connection->master_io_service = this->io_service;
this->acceptor->async_accept(*(this->connection->socket), this->connection->endpoint, boost::bind(CCore::handle_accept, this, boost::asio::placeholders::error));
}
class CConnection {
public:
CConnection(void);
boost::asio::io_service io_service;
boost::shared_ptr<boost::asio::ip::tcp::socket> socket;
boost::asio::ip::tcp::endpoint endpoint;
boost::shared_ptr<boost::thread> thread;
boost::asio::io_service *master_io_service;
bool close;
};
void worker(boost::shared_ptr<CConnection> connection)
{
boost::asio::ip::tcp::socket &socket = *(connection->socket);
boost::asio::socket_base::non_blocking_io make_non_blocking(true);
socket.io_control(make_non_blocking);
char acBuffer[1024];
std::string line("");
while (connection->close == false) {
} // while connection not to be closed
}
Кто-нибудь знает, как исправить эту ошибку? Спасибо.
поста a [sscce] (http://sscce.org). Я хотел бы, по крайней мере, увидеть определение 'class CCore' и реализацию' CCore :: handle_accept() '. –
Опубликованные определения CCore & accpetor. –
теперь ваш вопрос имеет меньшее значение, вы удалили определение класса CConnection. Пожалуйста, создайте [sscce] (http://sscce.org), чтобы мы могли понять вашу проблему. Я [попытался сделать это] (http://coliru.stacked-crooked.com/view?id=635bc33dd68507435a205a6b6338f85a-c056299b5afab84f40636e0111d56983), используя ваши фрагменты кода, он компилируется просто отлично. –