Multithreading 使用std::threads将对象移动到线程?

Multithreading 使用std::threads将对象移动到线程?,multithreading,qt,c++11,stdthread,Multithreading,Qt,C++11,Stdthread,我有一个基本的生产者/消费者应用程序,其中一些工人去对一个共享问题执行任务。使用并发for或类似的东西还不够简单。我已经习惯于使用Qt进行线程处理,因为这样做非常容易: for(int i = 0; i < nworkers; i++){ Worker* myworker = new Worker(); QThread* thread = new QThread; myworker->attachToThread(thread); myworker-

我有一个基本的生产者/消费者应用程序,其中一些工人去对一个共享问题执行任务。使用并发for或类似的东西还不够简单。我已经习惯于使用Qt进行线程处理,因为这样做非常容易:

for(int i = 0; i < nworkers; i++){
    Worker* myworker = new Worker();
    QThread* thread = new QThread;
    myworker->attachToThread(thread);

    myworker->doSomething(someArgument);
    myworker->doSomethingElse(someOtherArgument);
    myworker->run();
}
线程,但所有内容都封装在
foo
中。有了Qt,我就可以访问范围内的任何线程对象


我了解使用标准库在另一个线程中运行函数的基本知识,但我想知道我想要的是只有在更大的框架的帮助下才能实现的功能吗?

您想将类方法作为线程函数运行吗

std::thread t(&Worker::run, myworker, arg1, arg2, ...);
t.join();
或者,也许会使工人的方法

Worker::runT() {
  doSomething();
  doMore();
  std::thread t(&Worker::run, this);
}
您可以将.join()放在某个地方,或者放在析构函数中

Worker::runT() {
  doSomething();
  doMore();
  std::thread t(&Worker::run, this);
}