C++ 向QThreadPool::globalInstance()传递参数时出现问题->;开始()
所以我在防血类中有一个成员函数:C++ 向QThreadPool::globalInstance()传递参数时出现问题->;开始(),c++,qt,qthread,C++,Qt,Qthread,所以我在防血类中有一个成员函数: void AntiFlood::unBan() { QThread::msleep(5000); std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n"; sendIT(lineToPost); } 我想把它传给: threadpool.globalInstance()->开始(unBa
void AntiFlood::unBan()
{
QThread::msleep(5000);
std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
sendIT(lineToPost);
}
我想把它传给:
threadpool.globalInstance()->开始(unBan)
- 不起作用-结果有错误:调用'QThreadPool::start()'threadpool.globalInstance()->start(unBan)没有匹配的函数;
^;
但另一方面,如果我使用lambda:
auto lam = [this, room, nick](){ QThread::msleep(5000); std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n"; sendIT(lineToPost); }; threadpool.globalInstance()->start(lam);
如何将void AntiFlood::unBan()传递给threadpool.globalInstance()->start(),后者需要std::function函数运行?您看到的基本问题是,
AntiFlood::unBan
是(或至少“看起来是”)一个非静态成员函数。在这种情况下,必须针对类型为AntiFlood
的有效对象调用它。既然有签名
void QThreadPool::start(std::function<void ()> functionToRun, int priority = 0)
通过在lambda中捕获此
简言之,我认为您目前的工作方式是正确的/公认的。谢谢您的帮助。
auto lam = [this, room, nick]()
{
QThread::msleep(5000);
std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
sendIT(lineToPost);
};
threadpool.globalInstance()->start(lam);