gpt4 book ai didi

c++ - 为什么在这种情况下 boost 不创建线程 (C2248) 以及如何创建它?

转载 作者:行者123 更新时间:2023-11-30 01:29:36 24 4
gpt4 key购买 nike

所以我有这样的代码:

using namespace boost::asio::ip;
using namespace std;

void request_response_loop(boost::asio::ip::tcp::socket& socket)
{
http_request request(socket);
http_response response;
response.body = "<head></head><body><h1>It Rocks!</h1></body>";
response.send(socket);
socket.close();
cout << "connection resolved." << endl;
}


void acceptor_loop(){
boost::asio::io_service io_service;
int m_nPort = 12345;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), m_nPort));
cout << "Waiting for connection..." << endl;
while(true)
{
try
{
tcp::socket socket(io_service);
acceptor.accept(socket);
cout << "connection accepted." << endl;
boost::thread workerThread2(request_response_loop, socket); // here it does not compile because of C2248
}
catch(exception &e)
{
cerr << e.what() << endl; //"The parameter is incorrect" exception
}
}
}
int main()
{
boost::thread workerThread(acceptor_loop);
cin.get();
}

它给我错误:

Error   1   error C2248: boost::noncopyable_::noncopyable::noncopyable: "boost::noncopyable_::noncopyable"  boost\asio\basic_io_object.hpp  93  

如何在我用于接受套接字的线程中运行我的 request_response_loop 函数?

最佳答案

为了扩展 Ben 的回答,boost::shared_ptr<>是这里通常的机制:

void request_response_loop(boost::shared_ptr<tcp::socket> socket)
{
http_request request(*socket);
http_response response;
response.body = "<head></head><body><h1>It Rocks!</h1></body>";
response.send(*socket);
socket->close();
cout << "connection resolved." << endl;
}

void acceptor_loop()
{
boost::asio::io_service io_service;
int m_nPort = 12345;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), m_nPort));
cout << "Waiting for connection..." << endl;
while(true)
{
try
{
boost::shared_ptr<tcp::socket> socket =
boost::make_shared<tcp::socket>(boost::ref(io_service));
acceptor.accept(*socket);
cout << "connection accepted." << endl;
boost::thread workerThread2(request_response_loop, socket);
}
catch(exception &e)
{
cerr << e.what() << endl;
}
}
}

关于c++ - 为什么在这种情况下 boost 不创建线程 (C2248) 以及如何创建它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com