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);