누군가가 코드의이 조각에 어떤 문제가 있는지 말해 줄 수 결과 :순회은 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이며이 스레드에있는 세 번째 메소드가 작동 중일 때 잘 정의되어 있습니다. 또한 위의 루프를 통과하기 전에 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++;
}
을 작동하지 않습니다. 노력
유일한 방법은 : 다른 두 BAD 액세스에 실패하면서 왜 마지막이 작동
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 개 요소의 List>를 처리해야하며 타이밍을 줄이는 것이 내 목표입니다.
대단히 감사합니다. 이것은 정말로 내 문제를 해결합니다. 여전히 내 코드의 두 번째 변형이 처음에는 작동하지 않는 이유를 이해하지 못했습니다. 이제는 변형 1이 완전히 작동하므로 시간이 지남에 따라 효율성이 향상 될 것입니다. 다시 한 번 감사드립니다. –