は、誰かがコードのこれらの作品と間違っているものを私に言うことができる:はQFutureSynchronizer <T>を反復::結果
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をQFutureSynchronizerの両方であり、このスレッドに存在する3番目のメソッドが機能しているので、よく定義されています。また、上記のループを通過する前に、Up_corrとDown_corr QtConcurent :: runの両方が終了するのを待っています。
コードのこの変異体はまたtu->結果()またはTD->結果を()にアクセスしようとすると、それは同じエラーを与える
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++;
}
が機能していません。
働いている唯一の方法は次のとおりです。
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);
他の2つはBAD Accessで失敗しながら、最後の1が動作しているのはなぜ?
動作している最後の方法は最適ではありません。1つのベクトルを塗りつぶすには3つのループが必要です。 32要素については大きな問題ではありませんが、2k要素のList>を扱う必要があり、タイミングを短縮することが私の目的です。
ありがとう、これは本当に私の問題を解決します。私のコードの第二の変種がなぜ最初に機能しないのか、実際には分かりませんでした。変種1は完全に動作可能になったので、時間の中でより効率的になるように思えます。再度、感謝します –