临界段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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • quotient函数_Mid函数

    quotient函数_Mid函数今天学到一个新函数,很有用QuotedStr(s);//在s两边加单引号,这样就不会看着n多的单引号糊涂了。。。转载于:https://www.cnblogs.com/studypanp/p/4917369.html…

    2022年10月18日
  • Idea插件安装和管理「建议收藏」

    Idea插件安装和管理「建议收藏」1.打开插件视图点击File->Settings菜单,或Ctrl+Alt+S快捷键.打开设置面板.并切换到Plugins插件视图2.插件的管理和卸载当前idea中安装的所有插件(包括系统本身的和用户自己的)都会展示在列表中,右边的复选框表示当前插件的启用状态.在最右边的面板中显示了插件的具体信息和卸载按钮.当不需要插件时,…

    2022年6月1日
  • protostuff报错[通俗易懂]

    protostuff报错[通俗易懂]themethodmergeFrom(byte[],T,Schema)inthetype isnotapplicableforthe。。。。。如果出现以上报错,说参数类型不匹配,RuntimeSchema和Schema类型无法转换,有很大的概率是倒包倒错了。要注意,需要导入的是:io.protostuffprotostuff-core1.5.2

    2022年5月2日
  • centos7安装方法_ad9安装及激活成功教程教程

    centos7安装方法_ad9安装及激活成功教程教程本文超详细的将CentOS7的安装过程做了详细的记录,从下载镜像文件到安装CentOS再到最后的配置,手把手教学,保证能够顺利的将CentOS安装好、配置好。

    2022年10月4日
  • 什么软件自动刷点击量(不同的IP在刷网站)

    网络爬虫是目前各大企业获取数据的主要方式,很多人都知道爬虫使用代理IP,但对其中的原因却知之甚少。那为什么代理IP能帮助网络爬虫呢?1、已解决IP限制。目前大部分网站都有反爬虫技术,最常见的限制是IP接入。假如本站点的IP被封掉,可以用代理IP换IP后继续爬虫。2、提高爬虫的效率。如今有了工作效率的要求,不仅是使用单一的爬虫,为了提高爬虫的效率,可以使用多个爬虫来爬虫,这需要更多的IP,同时也需要IP的更换,自然离不开代理IP。以上介绍代理IP对网络爬虫的帮助关键,大家都有了认识,找代理IP时要找高.

    2022年4月13日
  • AWG线径对照表_直流电流线径对照表

    AWG线径对照表_直流电流线径对照表铜线直径通常以awg(美国导线规格)作为单位进行测量,24awg的意思是导线形成最后直径前所要经过的孔的数量为24,awg前的数值越大,导线经过的孔就越多,导线的.1、25AWG=0.455mm。2、详细看AWG线径对照表就行,AWG是美国线规的标准。3、AWG(Americanwiregauge)美国线规,是一种区分导线直径的标准,又被称为.不同线径(1毫米以下的)铜线载流量表s=i/j…

    2022年10月21日

发表回复

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

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