0

C ++でスレッドを作成する最も簡単な方法は何ですか? 既に宣言されているメソッドを使用して実行するものを作成したい。何かのようなもの:

 void task1(){
    cout << "Thread started";
 }

 thread t1 = thread(task1());

ライブラリをダウンロードする必要がなく、コンパイラがコンパイルできる可能性が最も高いスレッドを作成したいと思います。私が答えてほしい大きな質問は、c++11 とは何ですか? ということです。それはまったく別の言語ですか、それともライブラリのバンドルですか?

4

3 に答える 3

7

C++11 にはスレッド ライブラリがあります。非常に簡単な例は次のとおりです。

#include <iostream>
#include <thread>
void task1()
{
    std::cout<<"Thread started\n";
}
int main()
{
    std::thread t1(task1);
    t.join();
}

http://en.cppreference.com/w/cpp/thread/threadを参照してください。

于 2013-03-13T02:42:48.397 に答える
2

C++11 を使用できない場合は、プログラミングの目的によって異なります。次の "できるだけ単純な" スレッド化の例は、CreateThread関数を使用してアンマネージ Win32 コードで記述されています。

#include <Windows.h>
#include <tchar.h>
#include <iostream>

using namespace std;

DWORD WINAPI ThreadFunction(LPVOID lpParam) {
    WORD numSeconds = 0;
    for (;;) {
        Sleep(1000);
        cout << numSeconds++ << " seconds elapsed in child thread!" << endl;
    }
    return 0;
}

int _tmain(int argc, _TCHAR* argv[]) {
    HANDLE hThread;
    DWORD threadID;
    WORD numSeconds = 0;

    cout << "Hello world" << endl;

    hThread = CreateThread(NULL, 0, ThreadFunction, NULL, 0, &threadID);

    Sleep(500);
    for (;;) {
        cout << numSeconds++ << " seconds elapsed in main thread!" << endl;
        Sleep(1000);
    }

    return 0;
}

このアプローチを使用する場合は、CreateThread に渡される関数ポインターに署名が必要であることに注意してください。

DWORD ThreadFuncion(LPVOID lpParameter);

その署名の説明はMSDNにあります。

于 2013-03-13T02:52:25.487 に答える
0

C ++標準は、数年ごとに頻繁に改訂されます。いくつかのクールなものが追加され、古いものは下位互換性のために保持されます。ここにいくつかの歴史があります。

Boostは、C++標準の推進に非常に良い影響を及ぼします。

于 2013-03-13T07:16:55.020 に答える