【问题标题】:Make thread in class and use it in class C++在类中创建线程并在类 C++ 中使用它
【发布时间】:2017-01-09 18:37:33
【问题描述】:

我需要在课堂上创建新线程并使用它。 有人认为:

class Somethink
{
  public: 
    func_to_be_thread();
    init_func();
}

Somethink::init_func()
{
  std::thread newThread(func_to_be_thread);
}

int main()
{
  Somethink ss;
  ss.init_func();
}

编辑: 如何正确制作?我写的 Everythink 返回错误,因为 idk 如何使用参数(要运行的函数)类方法在类中创建新线程。我的问题是如何正确地做到这一点?

【问题讨论】:

  • 你从来没有问过问题。

标签: c++ multithreading oop


【解决方案1】:

您使用的是哪个 C++ 版本?您只能从 C++11 开始使用 std::thread .. 如果您需要更多语法帮助,可以查看std::thread calling method of class Start thread with member function

【讨论】:

    【解决方案2】:

    如果您需要使用成员函数创建线程,您可以执行以下操作:

    class Something
    {
       public: 
         void func_to_be_thread();
         void func_to_be_thread_advanced(const char* arg1);
    
         std::thread init_func();
         std::thread init_func_with_param(const char *arg1);
    }
    
    std::thread Something::init_func()
    {
      return std::thread(&Something::func_to_be_thread, this);
    }
    

    你也可以用 lambda 和参数来做:

    std::thread init_func_with_param(const char *arg1)
    {
      return std::thread([=] { func_to_be_thread_advanced(arg1); });
    } 
    

    【讨论】:

    • 感谢它的工作!我怎样才能让它无限?我需要从异步服务器接收数据包,如果我运行它,它会说终止调用而没有活动异常,如果我加入或分离它 - 程序将崩溃。
    • @lika85456 如果我理解正确,您可以在func_to_be_thread 中使用无限循环。但似乎最好创建另一个问题并将有问题的代码放在那里。它将有机会更好地分析新问题并提供更好的建议。
    • 我无法创建另一个问题,因为我需要等待 2 天._。并且谢谢我检查了那个标记:)
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多