c++非常简单的线程

C++ very simple thread?

本文关键字:线程 简单 非常 c++      更新时间:2023-10-16

在c++中创建线程的最简单方法是什么?我想用一个已经声明的方法来运行。比如:

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

我想我想做一个线程,不需要下载任何库,我的编译器将最有可能编译。我想回答的一个大问题是,c++11是什么?它是一种完全不同的语言,还是一堆库?

c++ 11有线程库。一个非常简单的例子是:

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

见http://en.cppreference.com/w/cpp/thread/thread

如果您不能使用c++ 11,这取决于您的编程目的。下面这个"尽可能简单"的线程示例是用非托管的Win32代码编写的,使用CreateThread函数:

#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上找到该签名的描述。

c++标准每隔几年就要修订一次。为了向后兼容,添加了一些很酷的东西,保留了一些旧的东西。这里有一些历史。

Boost在驱动c++标准方面有很好的影响。