【问题标题】:Vector of QThreads [duplicate]QThreads的向量[重复]
【发布时间】:2017-12-13 15:56:21
【问题描述】:

我正在尝试对我的图像记录应用程序进行多线程处理,以优化性能并防止 GUI 冻结。 我试图创建一个 CaptureThread 的向量(我的类扩展了 QThread),但它没有编译...

这是我的代码:

vector<CaptureThread> v_ct_Threads(i_SelectedCameras);

for(int i = 0; i < i_SelectedCameras; i++) {
    v_ct_Threads[i] = CaptureThread(i, qsb_Duration->value());
    v_ct_Threads[i].start();
}

for(int i = 0; i < i_SelectedCameras; i++) {
    v_ct_Threads[i].wait();
}

还有错误:

use of deleted function ‘CaptureThread& CaptureThread::operator=(CaptureThread&&)’
v_ct_Threads[i] = CaptureThread(i, qsb_Duration->value());

我猜这是一个愚蠢的错误,但我是 C++ 和 Qt 的初学者...

【问题讨论】:

  • 你不能复制线程。也许emplace_back 可以提供帮助
  • 你可能只需要一个 QThreadPool。

标签: c++ qt qthread


【解决方案1】:

CaptureThread的拷贝构造函数被删除,可能是因为QThread不能被拷贝。

您可以将 CaptureThreads 的指针放入线程向量中。

vector<std::unique_ptr<CaptureThread>> v_ct_Threads(i_SelectedCameras);

for(int i = 0; i < i_SelectedCameras; i++) {
    v_ct_Threads[i] = std::make_unique<CaptureThread>(i, qsb_Duration->value());
    v_ct_Threads[i]->start();
}

for(int i = 0; i < i_SelectedCameras; i++) {
    v_ct_Threads[i]->wait();
}

【讨论】:

  • 我更新到 C++ 14 并且您的解决方案似乎有效。谢谢。
  • @BlackSilver-55 std::make_unique 是 c++14 的一部分。有关它的更多信息,请参阅stackoverflow.com/questions/7038357/…,了解如何解决它在 c++11 中的缺失以及如何实现您自己的版本。
  • 在 C++11 中你可以使用:v_ct_Threads[i] = std::unique_ptr&lt;CaptureThread&gt;(new CaptureThread(i, qsb_Duration-&gt;value()));
猜你喜欢
  • 2011-11-29
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多