临界段CCriticalSection的使用[通俗易懂]

临界段CCriticalSection的使用[通俗易懂]类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加�一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其…

大家好,又见面了,我是你们的朋友全栈君。

CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加�一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其他线程统统堵塞。
CCriticalSection类的构造函数原型例如以下:

CCriticalSection() 

能够发现这个类的构造函数没有參数,所以创建一个CCriticalSection类的对象很easy,仅仅有例如以下就可以:

CCriticalSection criticalSection; 

演示样例:使用临界段编写一个有两个线程的应用程序。
1.创建单文档应用程序;
2.在视图类的实现文件里定义一个临界段对象:

CCriticalSection criticalSection; 

3.在视图类的实现文件里定义两个线程函数:

UINT MessageThread1(LPVOID pParam) 



    criticalSection.Lock(); 

    LPTSTR pMessage = _T(
“Thread1 is started”); 

    CWnd *pMainWnd = AfxGetMainWnd(); 

    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T(
“Thread message”), MB_OK); 

    criticalSection.Unlock(); 

    
return 
0



UINT MessageThread2(LPVOID pParam) 



    criticalSection.Lock(); 

    LPTSTR pMessage = _T(
“Thread2 is started”); 

    CWnd *pMainWnd = AfxGetMainWnd(); 

    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T(
“Thread message”), MB_OK); 

    criticalSection.Unlock(); 

    
return 
0



4.在视图类鼠标左键消息函数编写例如以下:

void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 



    AfxBeginThread(MessageThread1, _T(
“Thread is started”)); 
//启动线程1 

    AfxBeginThread(MessageThread2, _T(
“Thread is started”)); 
//启动线程2 

    CView::OnLButtonDown(nFlags, point); 



执行结果例如以下:

临界段CCriticalSection的使用[通俗易懂]

參考资料:
1.临界段类(CCriticalSection)——MFC http://blog.sina.com.cn/s/blog_627ebfc30100itd9.html
2.《MFC Windows应用程序设计(第2版)》

转载于:https://www.cnblogs.com/hrhguanli/p/4004463.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162056.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软考之网络基础

    软考之网络基础

    2021年11月29日
    35
  • c++反编译工具_pc下载软件

    c++反编译工具_pc下载软件  昨天在逆向某App的时候,发现有个加密工具类中的native方法是用C语言编写的,隐藏在so文件中。某大佬推荐逆向工具unidbg,能在pc端直接调用so文件中的函数,最终成功解决了问题。逆向工具之unidbg目录一、`unidbg`引入二、`unidbg`概述三、`unidbg`使用姿势1、下载`unidbg`项目2、导入到IDEA中①、解压压缩包②、打开`IDEA`,导入解压的项目3、测试`unidbg`4、运行自己的`so`文件①、编写`EncryptUtilsJni`类②、参数说明③、执行结果

    2022年9月18日
    1
  • linux convert 添加文字,Linux convert命令有什么用

    linux convert 添加文字,Linux convert命令有什么用Linuxconvert命令有什么用?Linux强大的图片处理功能强大的convert命令—介绍他的主要原因也是应为编程语言在linux下都可以调用使用convent命令可以对图片进行各种处理-trim:裁剪图像四周空白区域;-transparentcolor:去除图像中指定的颜色;-densitygeometry:设定图像的DPI值,若不明DPI值的概念,可参考《有关pt,p…

    2022年7月16日
    8
  • react 创建新页面_如何新建react项目「建议收藏」

    在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,今天我们介绍的是浏览器中直接引入的方式搭建react项目。如何新建react项目前文中,我们介绍过了2种react项目的搭建方式,分别是webpack的方式搭建和create-react-app脚手架的方式搭建感兴趣的同学可以点击下方链接,进行学习。webpack的方式搭建项目:怎样搭建rea…

    2022年4月14日
    138
  • idea2021.7.20激活码获取【2021.7最新】

    (idea2021.7.20激活码获取)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月20日
    34
  • 在vue3 中使用echarts

    在vue3 中使用echarts1,安装echartsnpminstallecharts–save有cnpm的可以cnpm安装2,在main.js中导入import{createApp}from’vue’importAppfrom’./App.vue’import*asechartsfrom’echarts’constapp=createApp(App).mount(‘#app’)app.echarts=echarts3,在需要使用的页面,定义div&lt

    2025年7月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号