关键部分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://javaforall.net/162029.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月20日 下午6:16
下一篇 2022年7月20日 下午6:16


相关推荐

  • LVS,Nginx,Haproxy三种负载均衡产品的对比[通俗易懂]

    LVS,Nginx,Haproxy三种负载均衡产品的对比[通俗易懂]本文介绍LVS,Nginx,Haproxy这三种负载均衡产品的区别。

    2022年7月24日
    9
  • 38.XDMA寄存器详解2-H2C、C2H通道寄存器组剖析

    38.XDMA寄存器详解2-H2C、C2H通道寄存器组剖析目录 1 上节回顾 2 H2C 寄存器剖析 2 1H2C 通道标识寄存器 0x00 2 2H2C 通道控制寄存器 0x04 2 3H2C 通道状态寄存器 0x40 2 4H2C 通道完成描述符数量寄存器 0x48 2 5H2C 通道对齐寄存器 0x4C 2 6H2C 通道查询模式回写地址寄存器 0x88 0x8C 2 7H2C 通道中断掩码寄存器 0x90 2 8H2C 通道性能监视控制寄存器 0xC0 2 9H2C 通道周期计数性能寄存器 0xC4 0xC8 2

    2026年3月18日
    1
  • php 文字转unicode,php汉字如何转unicode

    php 文字转unicode,php汉字如何转unicodephp 汉字转 unicode 的方法 首先创建 PHP 示例代码文件 然后定义一个 unicode encode 方法 接着再创建一个 unicode decode 方法 最后通过定义好的方法进行转换即可 php 汉字转 unicodephp 汉字转 Unicode 编码函数 str 原始字符串 encoding 原始字符串的编码 默认 GBK prefix 编码后的前缀 默认 postfi

    2026年3月26日
    2
  • linux关闭防火墙或开启防火墙命令_linux重启防火墙命令

    linux关闭防火墙或开启防火墙命令_linux重启防火墙命令Linux还是比较常用的,防火墙的关闭和开启可以通过命令来实现,下面由学习啦小编为大家整理了linux中关闭防火墙的命令,希望对大家有帮助!linux中关闭防火墙1)永久性生效,重启后不会复原开启:chkconfigiptableson关闭:chkconfigiptablesoff2)即时生效,重启后复原开启:serviceiptablesstart关闭:servicei…

    2025年9月19日
    5
  • LAMP架构简介与概述 及服务安装

    LAMP架构简介与概述 及服务安装1、LAMP平台概述(1)LAMP平台概述LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境LAMP是一个缩写词,具体包括Linux操作系统,Apache网站服务器,MySQL数据库服务器,PHP(或perl,Python)网页编程语言(2)构建LAMP平台顺序在构建LAMP平台时,各组件的安装顺序依次为Linux,Apache,MySQL,PHP其中Apache和MySQL的安装并没有严格的顺序要求,而PH

    2022年10月16日
    5
  • 一看就懂:cron 表达式

    一看就懂:cron 表达式前言 不知道你在玩游戏的时候是否发现过以下情况 1 玩某些游戏的时候 发现他的排行榜并不是时时更新的 而是每半个小时 或者一个小时更新一次 2 又比如很火的王者荣耀手游 它的日常任务 都是每天 5 点进行更新 那么 这些时间控制 到底是由谁控制得如此精准呢 原来 这些都是 corn 表达式的功劳 1 什么是 cron 表达式 在了解之前 我们先举几个例子 看看 corn 表

    2026年3月20日
    1

发表回复

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

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