C ++非常简单的线程?

时间:2013-03-13 02:39:56

标签: c++

在c ++中创建线程的最简单方法是什么?我想创建一个使用已声明的方法来运行。类似的东西:

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

 thread t1 = thread(task1());

我想我想创建一个不需要下载任何库的线程,并且我的编译器很可能能够编译。我想回答的一个重要问题是,什么是c ++ 11?它是一个完全不同的语言,还是一堆图书馆?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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上找到该签名的说明。

答案 2 :(得分:0)

C ++标准经常每隔几年就会修订一次。添加了一些很酷的东西,并保留旧的东西以便向后兼容。这是一些history

Boost在推动C ++标准方面有很好的影响力。