ランダムURLを生成する関数があり、ファイルをダウンロードしようとしています。変数を使用する関数を並列化する方法
void tryURL()
{
randURL.clear();
for (unsigned short i = 0; i < urlLength; i++) {
randURL = randURL + (alphabet[(int)((double)rand()/(RAND_MAX + 1) * alphabetLength)]);
}
wcout << randURL << endl;
HRESULT getImg = URLDownloadToFile(NULL, LPCWSTR((beginURL + randURL + endURL).c_str()), LPCWSTR((randURL + L"/" + endURL).c_str()), 0, NULL);
if (SUCCEEDED(getImg))
{
wcout << L"Success" << endl;
}
}
私は通常、この関数を実行すると、それは細かい作業です:
tryURL();
0ybOAt
tryURL();
lTPKaR
tryURL();
Ivi05m
...
しかし、私はその瞬間に繰り返し回数を、この機能を実行する必要があります。 私はこの試みた:
thread threads[10];
for (int i = 0; i < 10; ++i) {
threads[i] = thread(tryURL);
}
for (int i = 0; i < 10; ++i) {
threads[i].join();
}
をそして、それは常に同じ値
0ybOAt0ybOAt
0ybOAt
0ybOAt0ybOAt
0ybOAt
0ybOAt0ybOAt
0ybOAt
0ybOAt
そして時にはさんが表示されませんENDL私を返します。
どうすれば修正できますか?私はいつも同じ変数randURLを使用しているので壊れていたと思うが、これを避ける方法はわからない。代わりに、同じ変数を使用しての、tryURL
リターン URL作る
このコードはVC17で動作しません。 launch_asyncはlaunch :: asyncに置き換えられましたが、コマンドを使用できませんでした。 修正できますか? – megapro17
@ megapro17: 'consume'は単なる例です。それはあなたのロジックが行くべきところです。 –