我有一个基本的生产者/消费者应用程序,其中一些工作人员去处理共享问题的任务。使用并发或类似的东西并不是一件容易的事。我已经习惯使用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();
}
我想尝试切换到部分地使用std::thread
进行学习练习,部分使我不需要在Qt中链接。所以我的问题是,是否有一种简单的方法来分离线程中的对象,然后从中调用函数?在这种情况下,上面的模型非常有效。老实说,对于我的应用程序,我可以使用std::async
并将所有内容作为参数传递给worker函数,但我很好奇是否有办法用标准库编写上述代码。< / p>
我想我可以做点像
void foo(someArguments){
Worker* myworker = new Worker();
myworker->doSomething(someArguments);
myworker->run();
}
并线程化,然后将所有内容封装在foo
中。使用Qt,我可以在范围内的任何地方访问该线程对象。
我理解在使用标准库的另一个线程中运行函数的基础知识,但我想知道我想要的东西是否只有在更大框架的帮助下才能实现?
答案 0 :(得分:0)
您想将类方法作为线程函数运行吗?
std::thread t(&Worker::run, myworker, arg1, arg2, ...);
t.join();
或者可以制作工人方法
Worker::runT() {
doSomething();
doMore();
std::thread t(&Worker::run, this);
}
你可以把.join()放在某个地方,或者放在析构函数中