【发布时间】:2015-03-18 05:05:53
【问题描述】:
我有一个基本的生产者/消费者应用程序,其中一些工作人员去执行一个共享问题的任务。使用并发 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();
}
我想尝试改用std::thread,部分用于学习练习,部分用于不需要在Qt 中链接。所以我的问题是,有没有一种直接的方法可以在线程中分离一个对象,然后从中调用函数?上面的模型在这种情况下效果很好。老实说,对于我的应用程序,我可以使用 std::async 并将所有内容作为参数传递给工作函数,但我很好奇是否有办法根据标准库编写上述代码。
我想我可以做类似的事情
void foo(someArguments){
Worker* myworker = new Worker();
myworker->doSomething(someArguments);
myworker->run();
}
然后线程化,但随后所有内容都封装在foo 中。使用 Qt,我可以在其范围内的任何位置访问该线程对象。
我了解使用标准库在另一个线程中运行函数的基础知识,但我想知道我想要的是否只有在更大框架的帮助下才能实现?
【问题讨论】:
标签: multithreading qt c++11 stdthread