STL 写法
cpp
#include <thread>
#include <iostream>
using namespace std;
void thread_fun(void)
{
cout << "one STL thread!" << endl;
}
int main(void)
{
std::thread thread1(thread_fun);
thread1.join();
return 0;
}
其中,如果是创建CMake工程,CMakeLists.txt的内容如下:
cpp
cmake_minimum_required(VERSION 3.3)
#create a project
project(cpp_project)
#create exe file
find_package(Threads REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main Threads::Threads)
在Windows上运行
在Ubuntu上运行
解释说明:
1 std::thread
述代码中的线程类 std::thread 是标准库自带的线程类,在C++11中开始提供。
用这个类创建的线程对象的时候,必须提供一个函数(或者仿函数functor)作为线程执行体。所以,一个线程其实就是一个独立执行的函数。
这个独立是什么意思呢?后面会看出来。
thread1对象在构造的时候,接受一个普通的C函数作为执行体。
2 join
join是让main函数等待自己,等待线程thread1执行完了main函数再退出。
如果不是这样的话,main函数执行完线程对象创建之后,main函数就继续执行自己的 return 语句去了,main函数就会退出。main函数退出了不得了,整个可执行程序也会被操作系统收回。这样,线程就不能得到完整的执行。
Windows API写法
cpp
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI ThreadFun(LPVOID lpParamter)
{
cout << "one Windows thread!" << endl;
return 0;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);
//等待线程执行结束
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return 0;
}
Linux API写法
g++ HelloCPP.cpp -pthread -o main
cpp
#include <pthread.h>
#include <iostream>
using namespace std;
void* thread_fun(void *arg)
{
cout << "one Linux thread!" << endl;
return 0;
}
int main(void)
{
pthread_t thread_id;
pthread_create(&thread_id, NULL, thread_fun, NULL);
pthread_join(thread_id, NULL);
return 0;
}