单独创建一个线程并执行

C++并发编程入门 目录

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;
}
相关推荐
Wang's Blog14 分钟前
Java框架 SpringCloud 快速入门: Feign 的自定义配置与日志级别
java·开发语言·spring cloud
成旭先生24 分钟前
企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全
java·开发语言·api接口·企业信息查询·工商数据·风控尽调·供应商准入
2601_9628857225 分钟前
批量取数比循环单取快多少?用 AlphaFeed klines.batch给多股票取数提速
开发语言·php·batch
动词ing29 分钟前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法
无名猿32 分钟前
手写一个线程池:任务队列、工作线程与停止顺序的三个设计点
c++·性能优化·并发编程·现代c++
longlongzihan37 分钟前
LeetCode 128. 最长连续序列 —— 从排序到哈希集合
数据结构·c++·算法·leetcode·排序算法·哈希表
多弗朗皮卡丘39 分钟前
C++多继承
开发语言·c++·多继承
mmmmath_344 分钟前
二叉树の一些知识
数据结构·算法
程序员清风1 小时前
数据类型转换与日期时间处理
数据结构·pandas
lie..1 小时前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python