我建立一个线程池以提高我的raycaster性能。
因此我的线程池有一个作业队列:
std::vector<std::function<void()>> jobs;
和一个向线程池添加作业的公共函数。
void ThreadPool::executeJob(std::function<void()> job)
{
std::unique_lock<std::mutex> lockJobs(this->lockJobs);
this->jobs.push_back(job);
}
我现在想要引用线程池的唯一功能如下:
void MeshScene::CastRays(const Ray& ray, const int rayCount, const MatrixF& rot,
std::vector<IntersectionResult>& rayCollection)
{
// perform raycasts...
rayCollection.push_back(intersectionResult);
}
}
rayCollection
是我称之为executeJob(std::function<void()> job)
函数的类的成员。
现在我尝试用lambda引用它
threadPool.executeJob([ray, rayCount, rotation, this] () { CastRays(ray, rayCount, rotation, std::ref(this->testIntersectionCollection)); });
我得到了令人困惑的错误,我认为我的lamdba表达没有意义。有什么想法吗?
或者有人知道更好的解决方案,而不是用std :: function收集工作吗?
答案 0 :(得分:0)
很抱歉我的回复丢失了。我想出了一个解决方案,但忘了发布它。但这是我如何做到的:
Threadpool功能:
void executeJob(std::function<void()> job);
要致电的功能:
void CastRays(std::vector<Result>* resultCollection)
来自Threadpool的调用:
threadPool.executeJob([this] () { CastRays(&this->intersectionCollectionOne); });