所以我在AntiFlood类中有一个成员函数:
void AntiFlood::unBan()
{
QThread::msleep(5000);
std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
sendIT(lineToPost);
}我想把它传递给: threadpool.globalInstance()->start(unBan);
不工作的
auto = this, room, nick{ QThread::msleep(5000);std::string lineToPost =“踢"+ roomToPost +”+ nickToPost +\r\n“;sendIT(lineToPost);};
效果很好。如何将voidanti防洪水::unBan()传递给threadpool.globalInstance()->start(),这需要std::function functionToRun?
发布于 2020-09-06 18:02:38
您所看到的基本问题是,AntiFlood::unBan是一个非静态成员函数(或者至少“看起来是”)。在这种情况下,必须针对类型为AntiFlood的有效对象调用它。既然QThreadPool::start有签名..。
void QThreadPool::start(std::function<void ()> functionToRun, int priority = 0)你需要传递一个“自我包含”的std::function<void()>,这正是你要做的.
auto lam = [this, room, nick]()
{
QThread::msleep(5000);
std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
sendIT(lineToPost);
};
threadpool.globalInstance()->start(lam);通过在lambda中捕获this。
简而言之,我认为你目前的做法是正确的/被接受的。
https://stackoverflow.com/questions/63765032
复制相似问题