首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递给QThreadPool::globalInstance()->start()的问题

问将参数传递给QThreadPool::globalInstance()->start()的问题
EN

Stack Overflow用户
提问于 2020-09-06 14:09:34
回答 1查看 361关注 0票数 1

所以我在AntiFlood类中有一个成员函数:

代码语言:javascript
复制
void AntiFlood::unBan()
{
    QThread::msleep(5000);
    std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
    sendIT(lineToPost);
}

我想把它传递给: threadpool.globalInstance()->start(unBan);

不工作的

  • :没有调用'QThreadPool::start()‘threadpool.globalInstance()->start(UnBan)的匹配函数;^;但另一方面,如果我使用lambda:

auto = this, room, nick{ QThread::msleep(5000);std::string lineToPost =“踢"+ roomToPost +”+ nickToPost +\r\n“;sendIT(lineToPost);};

效果很好。如何将voidanti防洪水::unBan()传递给threadpool.globalInstance()->start(),这需要std::function functionToRun?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-06 18:02:38

您所看到的基本问题是,AntiFlood::unBan是一个非静态成员函数(或者至少“看起来是”)。在这种情况下,必须针对类型为AntiFlood的有效对象调用它。既然QThreadPool::start有签名..。

代码语言:javascript
复制
void QThreadPool::start(std::function<void ()> functionToRun, int priority = 0)

你需要传递一个“自我包含”的std::function<void()>,这正是你要做的.

代码语言:javascript
复制
auto lam = [this, room, nick]()
  {
    QThread::msleep(5000);
    std::string lineToPost = "KICK " + roomToPost +" "+ nickToPost + "\r\n";
    sendIT(lineToPost);
  };
threadpool.globalInstance()->start(lam);

通过在lambda中捕获this。

简而言之,我认为你目前的做法是正确的/被接受的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63765032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档