本文整理汇总了C++中Completion::wait方法的典型用法代码示例。如果您正苦于以下问题:C++ Completion::wait方法的具体用法?C++ Completion::wait怎么用?C++ Completion::wait使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Completion
的用法示例。
在下文中一共展示了Completion::wait方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ps
Array2D<float> evaluateImage(const Image &src, const std::vector<float> &scales, int steps)
{
int border = 2.5f * (*std::max_element(scales.begin(), scales.end()));
int w = src.getWidth(), h = src.getHeight();
progress(0);
Array2D<float> globalProfile[steps];
for(int i=0; i<steps; i++) {
globalProfile[i] = Array2D<float>(w,h);
globalProfile[i].fill(1.f);
}
{
Array2D<float> currentProfile[steps];
for(int i=0; i<steps; i++)
currentProfile[i] = Array2D<float>(w,h);
PrefixSums ps(src);
DifferenceJob jobs[steps];
Completion c;
float progress_step = 1.f/(steps * scales.size());
float progress_done = 0.f;
for(int i=0; i<steps; i++) {
jobs[i].src = &ps;
jobs[i].dst = ¤tProfile[i];
jobs[i].x1 = border;
jobs[i].y1 = border;
jobs[i].x2 = w-border;
jobs[i].y2 = h-border;
jobs[i].progress_step = progress_step;
jobs[i].progress_done = &progress_done;
jobs[i].completion = &c;
}
for(int s=0; s<(int)scales.size(); s++)
{
for(int i=0; i<steps; i++)
{
float angle = 2.0f*M_PI/steps*i;
jobs[i].scale = scales[s];
jobs[i].dx = jobs[i].scale * cosf(angle);
jobs[i].dy = jobs[i].scale * sinf(angle);
aq->queue(&jobs[i]);
}
c.wait();
for(int i=0; i<steps; i++)
for(int y=0; y<h; y++)
for(int x=0; x<w; x++)
globalProfile[i][y][x] *= currentProfile[i][y][x];
}
}
Array2D<float> maxs(globalProfile[0]), mins(globalProfile[0]);
for(int i=1; i<steps; i++)
for(int y=border; y<h-border; y++)
for(int x=border; x<w-border; x++) {
maxs[y][x] = std::max(maxs[y][x], globalProfile[i][y][x]);
mins[y][x] = std::min(mins[y][x], globalProfile[i][y][x]);
}
Array2D<float> eval(w,h);
eval.fill(0.f);
for(int y=border; y<h-border; y++)
for(int x=border; x<w-border; x++)
eval[y][x] = powf(maxs[y][x] - mins[y][x], 1.0f/scales.size());
return eval;
}