gpt4 book ai didi

c++ - 如何启动运行类函数的 boost 线程?

转载 作者:行者123 更新时间:2023-11-30 02:05:56 24 4
gpt4 key购买 nike

我正在做一个 C++ 类,我想在其中创建一个线程来执行该类的一个函数,我该怎么做?我给你看一些代码。

我想在线程中运行的成员函数:

void SocketServer::runServer(){
bool connected;
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), puerto));
std::string data;

while(seguirFuncionando()){
miSocket = new tcp::socket(io_service);
std::cout << "Waiting for connection...\n";
a.accept(*miSocket);
std::cout << "Connected\n";
connected = true;
try{
while (connected){
data = readStr();
if (data.compare("")==0){
std::cout << "End of connection.\n";
}
else{
std::cout << data << "\n";
}
}
}
catch (std::exception& e){
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}
}

我想做什么:

void SocketServer::runThreadServer(){
asio::thread t(runServer);
}

但它无法编译。错误:

没有匹配函数来调用'asio::thread::thread()注意:候选人是:asio::thread::thread(Function) [with Function = void (SocketServer::*)()]

我应该怎么做?

谢谢。

最佳答案

正如 Joachim Pileborg 所说,执行此操作的标准方法是使用 boost::bindboost::bind 专门创建了一个名为 boost::function 的结构(可以在 boost::thread 的 c'tor 中传递)来自 C++ 对象及其成员函数。

像这样:

boost::thread t(boost::bind(&SocketServer::runServer, this));

关于c++ - 如何启动运行类函数的 boost 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232010/

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