マルチスレッドで高速化
プログラムの高速化の手段の1つにマルチスレッドというものがあります。
c++では意外と簡単にできるので、チャレンジしてみてもいいかもしれないですね。
僕はよく画像処理をやるので、そこで使用したコードをのせときます。
ラムダ式の理解があるとよきです。
code: c++
struct Pixel_RGB {
unsigned char b;
unsigned char g;
unsigned char r;
};
・・・
int N, HN, AN;
std::thread* th;
if (1) {//マルチスレッド用の変数用意
int i = std::thread::hardware_concurrency();
if (i == 0) i++;
N = i;
HN = h / N;
AN = h % N;
}
th = new (std::nothrow)std::threadN; if (th == nullptr) {
//
//メモリ確保失敗時の処理をここに
//
return 0;
}
for (int i = 0; i < N; ++i) {
int sy = HN * i;
int fy = sy + HN;
if (i == N - 1) fy += AN;
thi = std::thread(data(int sy, int fy, Pixel_RGBA* data, int w, int h)//ラムダ式で書く。たぶん関数でもおk {
for (int y = sy; y < fy; y++) {
for (int x = 0; x < w; x++) {
int ix = y * w + x;//ここらで適当に画像処理
}
}
}, sy, fy, data, w, h
);
}
for (int i = 0; i < N; i++)//処理の終了を待つ
・・・
参考:
by metaphysical bard