1

私は C++ を初めて使用し、C++ でスレッド化をまだ使用したことがありません。Windows 7 で Visual Studio 2010 を使用しています。

私がやろうとしているのは、特定のシステム コマンドの N 回の実行をトリガーするメイン メソッドを作成することです。実行ごとに、完了時にその特定の実行にかかった時間を取得できます。また、そのコマンドのリターン コードを取得することで、コマンドが成功したか失敗したかを知ることができれば便利です。ボーナスとして、最初は必須ではありませんが、出力が返されると便利です。

これでほとんどの方法がわかりましたが、同時に N 個の実行を生成する必要があり、各実行が長時間実行される可能性が高いことを考えると、実行ごとにスレッドが必要になると推測しています。どうすればいいのかわからない。

C++ スレッド化に慣れていない人のために、推奨したいスレッド化実装とライブラリを選択し、上記を行う方法の main メソッドの例を教えてください。その後、C++ スレッドについても読む予定です (リソースに関するポインタがあれば教えてください)。どうもありがとう。

4

1 に答える 1

4

以下は、C++11の新しいスレッド機能を使用した小さなプログラムです。

#include <iostream>
#include <thread>
#include <future>
#include <chrono>
#include <vector>

std::chrono::nanoseconds run_program_and_calculate_time()
{
    // TODO: Do your real stuff here
    return std::chrono::nanoseconds(5);
}

int main()
{
    constexpr int N = 5;

    std::vector<std::future<std::chrono::nanoseconds>> results(N);

    // Start the threads
    for (int i = 0; i < N; i++)
    {
        results[i] = std::async(std::launch::async,
                [](){ return run_program_and_calculate_time(); });
    }

    // Wait for all threads to be done results
    for (int i = 0; i < N; i++)
        results[i].wait();

    // Print results
    for (int i = 0; i < N; i++)
    {
        std::cout << "Result from " << i << ": "
                      << results[i].get().count() << " nanoseconds\n";
    }
}
于 2012-10-10T11:23:16.847 に答える