【问题标题】:Visual Studio13 Creating Threads and Optimizing ProcessVisual Studio13 创建线程和优化流程
【发布时间】:2014-08-07 05:54:19
【问题描述】:

我在 VS13 中写多个线程

函数声明:

void getColorImage(HANDLE &colorEvent, HANDLE &colorStreamHandle, Mat &colorImage);
void getDepthImage(HANDLE &depthEvent, HANDLE &depthStreamHandle, Mat &depthImage);
void getSkeletonImage(HANDLE &skeletonEvent, Mat &skeletonImage, Mat &colorImage, Mat &depthImage, ofstream& myfile);

int main()
{
    // this is inside a while loop

    std::thread first(getColorImage, colorEvent, colorStreamHandle, colorImage);
    std::thread second(getDepthImage, depthEvent, depthStreamHandle, depthImage);
    std::thread third(getSkeletonImage, skeletonEvent, skeletonImage, colorImage, depthImage, myfile);

    first.join();
    second.join();
    third.join();
 }

但是,我收到一个错误:

错误 1 ​​错误 C2280: 'std::basic_ofstream>::basic_ofstream(const std::basic_ofstream> &)' : 试图引用已删除的函数 c:\program files (x86)\microsoft visual studio 12.0\vc\包括\type_traits 1545 1 Skeleton_RGBDepth_DataAcquisition2013

不知道为什么...有人可以帮忙吗?

【问题讨论】:

  • 使用std::ref(myfile) 而不仅仅是myfile

标签: c++ multithreading c++11


【解决方案1】:

std::thread 构造函数,和std::bind 一样,都是按值取值的。但是std::ofstream 有一个deleted 复制构造函数,因此出现错误。

std::ref包装所有应该通过引用传递的参数。

【讨论】:

  • 成功了,谢谢!在此之后,我还在 while 循环中保存图像,并且我也在尝试加快速度。 std::thread im01(cv::imwrite, fnameC, colorImage); std::thread im02(cv::imwrite, fnameD, depthImage); im01.join(); im02.join();但是得到一个错误: Error 1 error C2198: 'bool (__cdecl *)(const std::string &,cv::InputArray,const std::vector> &)' : too调用 c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 1149 1 Skeleton_RGBDepth_DataAcquisition2013 有什么建议吗?
  • @ajl123:错误信息非常清楚:您遗漏了一个论点。
  • 然而,cv::imwrite 有两个参数。我要传递的文件名和 Mat 图像?
  • @ajl123:错误信息清楚地表明存在const std::vector<int,std::allocator<int>> & 类型的第三个参数。它实际上是一个可选参数,但我想你不能在模板代码中省略它。
  • @ajl123: std::thread 遵循std::bind 的语法,这很奇怪。传递 lambda 更容易,例如 std::thread something([=](){cv::imwrite(fnname, image);});
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多