97 int number_of_threads = QThreadPool::globalInstance()->maxThreadCount();
99 if(number_of_threads == 1)
105 monitor.
setStatus(QObject::tr(
"parallelized extraction of %1 XICs")
106 .arg(xic_coord_list.size()));
108 std::size_t chunck_size = xic_coord_list.size() / number_of_threads;
110 if(chunck_size < 1000)
113 struct parallelExtractChunck
115 std::vector<XicCoordSPtr>::iterator it_xic_coord_begin;
116 std::vector<XicCoordSPtr>::iterator it_xic_coord_end;
119 std::vector<parallelExtractChunck> chunck_list;
121 for(
auto it = xic_coord_list.begin(); it != xic_coord_list.end();)
123 qDebug() <<
"chunck_size=" << chunck_size;
124 parallelExtractChunck chunck;
125 chunck.it_xic_coord_begin = it;
126 for(std::size_t i = 0; i < chunck_size && it != xic_coord_list.end();
131 chunck.it_xic_coord_end = it;
132 chunck_list.push_back(chunck);
138 std::function<std::size_t(
const parallelExtractChunck &)> extractChunck =
139 [self](
const parallelExtractChunck &extract_chunck) {
142 self->protectedExtractXicCoordSPtrList(
144 extract_chunck.it_xic_coord_begin,
145 extract_chunck.it_xic_coord_end);
146 self->postExtractionProcess(monitor,
147 extract_chunck.it_xic_coord_begin,
148 extract_chunck.it_xic_coord_end);
155 std::function<void(std::size_t & result,
const std::size_t &value)>
157 [monitorRef](std::size_t &result [[maybe_unused]],
158 const std::size_t &value
159 [[maybe_unused]]) { monitorRef->
count(); };
162 QFuture<std::size_t>
res =
163 QtConcurrent::mappedReduced<std::size_t>(chunck_list.begin(),
167 QtConcurrent::UnorderedReduce);
175 res.waitForFinished();