c++11多线程学习

MFC实现AfxbeginThread 线程 创建、挂起、释放、结束、退出实例(附完整源码) 阅读详情

由来

读取大量数据文件的需求。

平台

支持c++11的编译器

以前的情况

在windows平台,MS提供里AfxBeginThread,AfxEndThread等一些多线程函数,但这些函数需要定义一个全局线程函数,不直观方便,而且传入的参数多的时候还要封装成结构并传递指针,线程内部再转换,很不方便。
好在,我们还有C++11。

简单例子

启动一个线程,然后等它结束:

#include <thread>         // std::thread

void foo() 
{
  // do stuff...
}

int main() 
{
  std::thread first (foo);  
  first.join();
}

稍微复杂的例子

传2个参数进去,如果是AfxBeginThread,那么就需要构造结构体了。

void foo(int x,int y)
{
  // x = 4, y = 5.
}
int main() 
{
  std::thread t(foo,4,5); // Acceptable.
  t.join(); 
}

类成员函数为线程函数的例子

线程函数在c++11以前是可以做类成员函数的,但是方法比较复杂,要么声明为静态函数,要么声明为friend,但这都破坏里类的封装性。c++11就不同里了。

class bar {
public:
  void foo() {
    // do stuff...
  }
};

int main()
{
  std::thread t(&bar::foo, bar());
  t.join();
}

再复杂点的例子

有时候不想再主线程里显式开线程,那么就在类成员函数里开就好了

class Wrapper 
{
   public:
      void member1() 
      {
          std::cout << "i am member1" << std::endl;
      }
      void member2(const char *arg1, unsigned arg2) 
      {
          std::cout << "i am member2 and my first arg is (" << arg1 << ") and second arg is (" << arg2 << ")" << std::endl;
      }
      std::thread member1Thread() 
      {
          return std::thread([=] { member1(); });
      }
      std::thread member2Thread(const char *arg1, unsigned arg2) 
      {
          return std::thread([=] { member2(arg1, arg2); });
      }
};

int main(int argc, char **argv) 
{
   Wrapper *w = new Wrapper();
   std::thread tw1 = w->member1Thread();
   std::thread tw2 = w->member2Thread("hello", 100);
   tw1.join();
   tw2.join();
   return 0;
}

注意这里线程成员函数使用里lambda匿名函数,并且使用里[=]捕获变量,在传入的参数不是指针的时候,使用引用[&]

参考文献

1.std::thread
2.c++11 线程:让你的多线程任务更轻松
3.Start thread with member function

基于Simulink的输入-输出线性化精确转矩控制 本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,通过建立PMSM非线性状态空间模型,设计IOL控制器将系统转化为线性输入-输出映射。文章包含系统原理推导、Simulink建模步骤、参数整定方法和仿真结果分析,验证了IOL在高动态、宽速域工况下的优越性能(转矩误差降低90%)。最后提出了工程实现要点和扩展应用方向,为开发高精度电机驱动系统提供了实用指导。 阅读详情

相关推荐

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3306

VC启动一个新线程的三种方法

主要用AfxBeginThread()函数来 UINT  myproc(LPVOID  lParam) { CITTDlg *pWnd = (CITTDlg *)lParam; pWnd->KMeansSegment(); return 1; } void CITTDlg::KMeansSegment() { // 主要处理函数在这里写 } voi

Marshall的专栏 1万+

zemax显微镜设计

光学显微镜(Optical Microscope,简写OM)是利用光学原理,把人眼所不能分辨的微小物体放大成像,以供人们提取微细结构信息的。我这里是插入进来之后才反转,如果之前已经在目镜的单独文件夹反转过了就不用了。将目镜的焦距设定为25mm,通过缩放,然后将镜头调转过来。镜头数据中的曲率半径、物距像距都设置为变量。将镜头的焦距整体变为16.25mm。将孔径类型设置为按照光阑尺寸浮动。打开物镜的文件,选择插入镜头。由英国物理学家虎克制作。2、像空间孔径0.25。3、像面大小-0.9。

fendoudecheng的博客 8547

Windows下使用CreateThread()和_beginthreadex()的区别

根据《Win32多线程程序设计》中的介绍,当创建的子程序中包含某些C runtime 函数时,不应该使用CreateThread()。 如果主线程以外的任意新建的线程中包含以下操作,则应该使用多线程版本的C runtime library,并使用_beginthreadex()和_endthreadex(): 在C程序中使用malloc()和free(),或者在C++程序中使用new()和delete(); 调用stdio.h或io.h中声明的任何函数,包括fopen()、open()、getchar..

zhjs_abc的博客 479

海康视觉脚本开发全流程解析

本文详细解析了海康机器视觉平台(VM)中脚本模块的开发全流程。从创建第一个脚本模块入手,深入讲解了输入参数、输出参数与内部变量的定义与区别,并提供了C#脚本编写、公用函数调用、代码结构组织以及编译调试的实用指南。旨在帮助开发者掌握海康视觉脚本开发的核心技巧,高效实现复杂的自定义视觉逻辑处理。

beer8的博客 603

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1526

多线程编程——AfxBeginThread

在MFC中,我们可以用到的一个API是AfxBeginThread,它的函数声明原型如下: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,

jmxiaocai的专栏 1024

《MySQL 入门教程》第 03 篇 管理数据库

本篇主要介绍 MySQL 数据库的创建、查看、选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式。

Tony.Dong的专栏 3525

线程的创建以及使用(MFC/C/C++)

主要介绍线程创建的几种方法,以及常用的线程方法并附上代码

bigger_belief的博客 3314

3.2 直流无刷电机(BLDC):状态空间模型与传递函数

状态空间模型和传递函数是分析BLDC电机动态特性的重要工具。状态空间模型通过微分方程描述系统内部状态与输入输出关系,适用于多变量系统分析;传递函数则在频域表征系统特性,便于控制器设计。本文详细推导了三相坐标系和dq坐标系下的BLDC电机状态空间模型,讨论了线性化方法,并介绍了从状态空间模型到传递函数的转换过程。这些模型为BLDC电机的控制系统设计提供了理论基础。

技术工作者 246

AI实时盯盘与素材更新迭代功能开发——千川素材投流系统完全指南

《AI驱动的千川素材投流系统完全指南》摘要 本文针对抖音电商生态中巨量千川平台的素材投放挑战,提出了一套AI驱动的实时盯盘与素材更新迭代解决方案。系统通过分层架构设计,整合数据采集、实时监控、AI分析和自动化执行模块,实现分钟级数据追踪与智能决策。核心功能包括实时数据采集、异常检测、自动化投放调整和素材生命周期管理,有效解决人工盯盘效率低、素材生命周期短、决策响应慢等痛点。系统采用Python+FastAPI技术栈,结合机器学习和自动化工具,提供从数据采集到决策执行的全链路解决方案,帮助商家提升投放效率和R

huanghm88的专栏 237

C++11 多线程学习

thread.hthread 类 (成员方法)thread 构造函数join 等待结束detach 分离线程,则无需等待结束this_thread 命名空间(静态方法)get_id 获取当前线程idyield 暂时交出cpu执行权sleep_for 睡眠等待函数sleep_until 等待到下一个具体的时间mutex.hmutex 互斥锁lock_guard 配合互斥锁,达到互斥锁作用域范围内的自动上锁解锁。

zw1996的博客 750

麻雀搜索算法(SSA)详解:从鸟群智能到优化实践

麻雀搜索算法(SSA)是一种新型群智能优化算法,模拟麻雀群体的觅食行为和反捕食机制。该算法将优化问题转化为麻雀群体对食物源的搜索过程,通过发现者、加入者和警戒者的角色分工实现高效优化。SSA具有原理新颖、参数合理、收敛快速等特点,在函数优化、工程设计和机器学习等领域展现出良好应用前景。算法通过数学模型模拟麻雀的觅食策略,包括发现者全局探索、加入者局部开发和警戒者危险预警机制,有效平衡了全局搜索与局部开发能力。SSA相比传统优化算法具有更好的收敛性和优化效果。

qq_42212808的博客 1073

C C++最全Posix线程和C++11多线程学习_posix的pthread转换成c++11的mutex,2024年最新C C++开发者该学习哪些东西提高竞争力

/lambda格式。

2401_84973733的博客 734

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Posix线程和C++11多线程学习_posix的pthread转换成c++11的mutex(2)

(img-isyT35xa-1715840411659)](img-GxbYwEVo-1715840411659)]//lambda格式。

2401_84976207的博客 429

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++11多线程学习总结

c++11多线程学习总结 1并发 线程 进程 1)进程:进程(Process)是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。通俗的来讲,比如说电脑上打开了word是一个进程,打开了一个浏览器是一个进程,打开一个.exe是一个进程。 2)线程:就是说比如我打开了一个.exe,然后进程默认进入的是主线程,如果还开了其他线程便会同主线程同时进行 3)并发:并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行

ppinkgirll的博客 336

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【C++11】关于C++11多线程的学习资料

参考链接: 1、https://blog.youkuaiyun.com/m0_37621078/article/details/88608675 2、https://www.runoob.com/cplusplus/cpp-multithreading.html join()函数主要是等待线程结束才执行下一行代码(阻塞作用); detach()脱离线程,即使main函数结束了,线程照样运行。 Qt代码:注意....

David Xiao 507

C++11多线程学习笔记

C++11多线程学习笔记1. 引言2. 线程的启动、结束,创建线程3. 线程传参,detach()坑,成员函数做线程函数4. 创建多个线程、数据共享问题分析5. 互斥量,死锁6. unique_lock7. 单例设计模式数据共享分析、解决8. condition_variable、wait、notify_one、notify_all9. async、future、packaged_task、pro...

wuerfang的博客 985

c++11 多线程学习记录

#include<iostream> #include<thread> using namespace std; void func1(){ cout<<"func1 thread id "<<this_thread::get_id()<<endl; cout<<"begin func1"<<endl; for(int i=0;i<10;i++){ // this_thread:

wzzzj的博客 988

C++ 11多线程学习笔记

一、多线程小实例 #include <thread> #include <iostream> void foo() { std::cout << "Hello world" << std::endl; } int main() { std::thread thread(foo); // 启动线程foo thread.jo...

zzh_AI的博客 280

[C++11] 多线程的参考资料

[C++11] 多线程的详解 一、参考链接 b站视频链接 C++多线程笔记 C++ 11 并发与多线程 二、多线程笔记 第一节 并发基本概念及实现、进程、线程基本概念 (1)并发、进程、线程基本概念和综述 并发 两个及以上的任务(独立活动)同时进行(发生);(一个程序同时执行多个独立任务) 单核cpu,某时刻只可以执行一个任务,由操作系统调度,每秒进行多次“任务切换”,形成多任务同时进行(并发)的错觉。(又称为上下文切换,需要保存任务的上下文,有时间开销) 多核cpu,能够实现真正的并发(目的是为了提高

qq_43331089的博客 634

C++11多线程——mutex学习

Mutex也称之为互斥量,C++11中与mutex相关的类与函数声明都在头文件中。   一头文件内容简介: Classes 1.1 Mutexes mutex                               mutexclass(class) recursive_mutex                 Recursivemutex class(class) ti

Fivestar_wang的专栏 2956

C++11多线程学习之线程同步

既然存在多线程,就会存在线程同步的

457

C++11 多线程相关知识的学习

C++多线程类Thread(C++11) C++11中std命名空间将Boost库中的Thread加入,Boost的多线程从准标准变为标准,这里将其用法整理复习,以demo的形式复习,还是喜欢看我自己写的东西,符合我的个人逻辑 头文件为#include<thread>,通过std::thread应用。就以Hello thread开始吧,需要注意的是1,join()函数和detach()函数的区别,2,数据同步操作mutex(需包含include<mutex>):互斥锁 1、普..

CHYabc123456hh的博客 210

用C++11学习多线程

有了线程,多核才有了真正意义上的并发。在单核时代,所谓的并发只是伪并发,类似于事件轮询的方式。只是轮询的周期比较快,所以对于我们人类来说看上去和真的并发没什么区别。如果把主人公换成复仇者联盟2上的快银,在他的世界观里。。。呵呵 并发毫无疑问能提高工作效率,但也肯定会有一些问题需要注意。很明显的一个问题就是,对于共享资源的访问。因为线程之间是栈私有,堆共有的。对于局部变量不会有什么问题,但如果两个线

Coder 612

C++11多线程学习-1

说明 最近打算好好学习多线程编程,特从网上和书籍中翻阅相关资料进行学习。据说C++11多线程主要以《C++ Concurrency In Action》这本书作为学习素材,打算先通过网上学习,如果需要在进行购买此书籍。 并发概述 谈及到多线程编程,那么首先需要了解并发的概念。何谓并发,我们可以这样形象的理解,比如说人在行走过程中可以唱歌,行走和唱歌是两件事情,但是他们是并发执

gossiplee的博客 905
上一篇: 个人建站
下一篇: 较大数据文件的读取优化过程续
洗洗睡去
博客等级 码龄19年 277粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值