单独创建一个线程并执行

news2024/11/26 2:31:26

C++并发编程入门 目录

STL 写法

#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的内容如下:

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写法

#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

#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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字IC验证——PSS可移植测试用例

PSS是Accellera组织定义的测试用例生成规范&#xff0c;其思想是定义一个抽象模型&#xff0c;EDA工具可以从中生成适用于每个设计层次结构和每个验证平台的测试&#xff0c;即PSS定义了统一的测试场景&#xff0c;而场景的使用可以横跨不同验证层次和配置。 这种特性决定了PSS…

docker笔记8:Docker网络

1.是什么 1.1 docker不启动&#xff0c;默认网络情况 ens33 lo virbr0 在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后&#xff0c;启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡&#xff1a;它还有一个固定的默认IP地址192.168.122…

快速掌握STM32工程创建

STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…

租服务器训练深度学习模型

一、选择租哪个 推荐用AutoDL(便宜、功能强大、gug少、有时时客服解决问题) AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 二、注册、登录 学生可以认证&#xff0c;享受会员价 服务器需要登录后先充值&#xff0c;先充个10元&#xff0c;接下来试试看。每次都是开机…

Web framework-Gin(二)

一、Gin 1、Ajax AJAX 即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript和 XML&#xff09;&#xff0c;是指一种创建交互式、快速动态网页应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。通过在后台与服…

AppleID切换验证手机

第一步&#xff1a;登录个人信息页面 https://appleid.apple.com/account/manage/section/security 第二步&#xff1a;选择账户安全 第三步&#xff1a;验证新手机号即可

供应链 | 顶会CIKM论文精读:面向大规模三维装箱问题的数据驱动树形搜索算法

论文解读&#xff1a;丁建辉&#xff0c;李明哲&#xff0c;赵艳蓉&#xff0c;孙楚天 编者按 本次解读的文章发表于CCF-B类会议30th ACM International Conference on Information and Knowledge Management。摘要总结如下&#xff1a; 3维装箱问题&#xff08;3D-BPP&#…

2023第二届陇剑杯网络安全大赛 预选赛Writeup

题目附件 链接&#xff1a;https://pan.baidu.com/s/1J20VusdMjit4coWAi5lnnQ 提取码&#xff1a;6emq 文章目录 HWhard_web_1hard_web_2hard_web_3 SSsevrer save_1sevrer save_2sevrer save_3sevrer save_4sevrer save_5sevrer save_6sevrer save_7sevrer save_8 WSWireshar…

46、TCP的“三次握手”

在上一节中&#xff0c;TCP首部常用的几个选项&#xff0c;有些选项的参数就是在通信双方在建立TCP连接的时候进行确定和协商的。所以在学习过TCP报文首部之后&#xff0c;下面我们开始学习TCP的连接建立。 TCP的一个特点是提供可靠的传输机制&#xff0c;还有一个特点就是TCP…

字符型注入([SWPUCTF 2021 新生赛]easy_sql)

拿到题目&#xff0c;查看源码&#xff0c;可知是要输入参数wllm。 输入参数/?wllm1&#xff0c;得到会显 继续输入参数/?wllm1&#xff0c;报错&#xff0c;确定为字符型漏洞 1.查看字段列表&#xff0c;发现在字段4报错&#xff0c;确定为3列 ?wllm-1 order by 3-- ?wl…

基于JavaScript粒子流动效果

这是一个HTML文件&#xff0c;主要包含了一些CSS样式和JavaScript代码&#xff0c;用于创建一个动画效果。 在CSS部分&#xff0c;定义了一些基本的样式&#xff0c;包括页面的背景颜色、位置、大小等。特别的&#xff0c;定义了两种球形元素&#xff08;.ball_A 和 .ball_B&am…

静态路由配置实验:构建多路由器网络拓扑实现不同业务网段互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照需求配置静态路由&#xff0c;实现连接 PC 的业务网段互通 摘要&#xff1a; 本实验旨在通过配置网络设备的IP地址和静态路由&#xff0c;实现不同业务网段之间的互通。通过构建一组具有…

nginx-基于range做断点续传

nginx默认开启了range断点续传&#xff0c;只要再请求时载请求头上添加header&#xff0c;range&#xff0c;nginx就可以根据range范围返回相应的字节。

zabbix配置钉钉告警

钉钉告警python脚本 cat python20 #!/usr/bin/python3 #coding:utf-8 import requests,json,sys,os,datetime # 机器人的Webhook地址 webhook"钉钉" usersys.argv[1] textsys.argv[3] data{"msgtype": "text","text": {"conten…

Leetcode 2431.最小偶倍数

给你一个正整数 n &#xff0c;返回 2 和 n 的最小公倍数&#xff08;正整数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;10 解释&#xff1a;5 和 2 的最小公倍数是 10 。示例 2&#xff1a; 输入&#xff1a;n 6 输出&#xff1a;6 解释&#…

docker 笔记10:Docker轻量级可视化工具Portainer

1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2.安装 https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 步骤 docker命令安装 docker run -d …

【postgresql 基础入门】数据库服务的管理

数据库服务管理 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff…

第一章:绪论

1.1 系统架构概述 架构是体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系以及指导它的设计和发展的原则。 系统是组织起来完成某一特定功能火一组功能的组件集。系统这个术语包括了单独的应用程序、传统意义上的系统、子系统、系统之系统、产品线、整个企业及…

三层交换实验:实现不同VLAN间的互通与路由配置

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. PC 配置 IP 地址2. PC2 属于 Vlan10&#xff0c;PC3 属于 Vlan20&#xff0c;在三层交换机上配置 Vlanif 三层接口实现 Vlan10 和 Vlan20 三层互通3. 测试在 PC3 上 Ping PC4 &#xff0c;可以 Ping 通 PC4…

吴恩达《面向开发者的提示词工程》

Ref&#xff1a; 【中英字幕 | P01 Introduction】2023吴恩达新课《面向开发者的提示词工程》_哔哩哔哩_bilibili 对应的笔记 ChatGPT Prompt - 知乎 本课程主要介绍指令微调LLM的最佳实践 在大型语言模型或LLM的开发中&#xff0c;大体上有两种类型的LLM&#xff0c;我将其…