在C++中关联packaged_task和线程
Associate packaged_task and thread in C++
所有
我有一门课:
class someClass
{
public:
vector<int> someOperation(int start, int end)
{
// do something...
}
}
和一个主要功能:
int main()
{
someClass obj;
std::packaged_task<vector<int>(int, int)> task(&someClass::someOperation);
std::thread t1 = std::thread(std::move(task), &obj, 0, 200); // Error happens here
std::thread t2 = std::thread(std::move(task), &obj, 201, 400);
std::thread t3 = std::thread(std::move(task), &obj, 401, 600);
t1.join();
t2.join();
t3.join();
return 0;
}
我希望这段代码可以创建三个线程,对一段数据的不同部分运行相同的操作然而,在线程t1的定义中,编译器弹出以下错误:
error C2046: term does not evaluate to a function taking 3 arguments
我能知道我做错了什么吗?我该怎么做才对?
非常感谢。
长
问题是,如果没有someClass
的实例,就无法使用&someClass::someOperation
。您意识到,因为您确实将一个这样的实例传递给了线程构造函数,但在packaged_task
签名中忘记了它:
std::packaged_task<vector<int>(someClass*, int, int)> task(&someClass::someOperation);
另一个问题是,您正试图将task
移动到三个不同的位置。这是行不通的:在它移动一次之后,task
将不再有效,并且将它移动到其他线程中也不会达到您所期望的效果。你需要三个不同的任务。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 为什么我不能在 while 循环中创建线程?