循环访问 QFutureSyncer:<T>:results



有人可以告诉我这些代码有什么问题:

std::vector<double> vUp;
QFuture<double> tu, td;
foreach(boost::tie(tu, td), boost::combine(Up_corr.futures(), Down_corr.futures()))
{
   vUp.push_back((tu.result()+td.result())*0.5);
 }

我在运行时遇到以下错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x51)

up_corr和down_corr都是qfuturessynchronizer,并且被很好地定义为此线程中存在的第三种方法。另外,在通过上述循环之前,我正在等待,up_corr和down_corr qtconcurent :: run完成。

代码的这种变体也无法正常工作

std::vector<double> vUp;
QList< QFuture<double> >::const_iterator tu   = Up_corr.futures().cbegin();
QList< QFuture<double> >::const_iterator td = Down_corr.futures().cbegin();
for(size_t iCh = 0; iCh < 32; iCh++)
{
     vUp.push_back((tu->result()+td->result())*0.5);
     tu++;
     td++;
}

尝试访问tu-> result()或td-> result()。

时会出现相同的错误

唯一有效的方法是:

std::vector<double> v1;
std::vector<double> v2;
foreach(QFuture<double> thread, Up_corr.futures())
       v1.push_back(thread.result());
foreach(QFuture<double> thread, Down_corr.futures())
       v2.push_back(thread.result());
for(size_t iCh = 0; iCh < 32; iCh++)
       vUp.push_pack((v1[iCh]+v2[iCh])*0.5);

为什么最后一个工作在其他两个失败的情况下工作?

失败?

正在使用的最后一种方法不是最佳的:要填充一个向量,我将需要三个循环。对于32个元素,这没什么大不了的,但是,我还需要处理列表> 2K元素的列表,而减少时间安排是我的目标。

我不知道foreach宏,但是假设它与基于范围的for相似,则可以使futures()的结果保持活力。其他变体将此结果用作表达式的一部分,然后让它死亡:只有直接绑定到const&或与&&的临时绑定。表达式中使用的其他临时性在完整表达的末尾被破坏。您可能想尝试

之类的东西
// ...
auto&& ucf = Up_corr.futures();
auto&& dcf = Down_corr.futures();
foreach(boost::tie(tu, td), boost::combine(ucf, dcf))
{
    vUp.push_back((tu.result()+td.result())*0.5);
}

相关内容

  • 没有找到相关文章

最新更新