关键部分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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 查看smart_离线安装smartctl

    linux 查看smart_离线安装smartctlSmartctl(S.M.A.R.T自监控,分析和报告技术)是类Unix系统下实施SMART任务命令行套件或工具,它用于打印SMART自检和错误日志,启用并禁用SMRAT自动检测,以及初始化设备自检。Smartctl对于Linux物理服务器十分有用,在这些服务器上,可以对智能磁盘进行错误检查,并将与硬件RAID相关的磁盘信息摘录下来。在本帖中,我们将讨论smartctl命令的一些实用样例。如果你…

    2022年10月8日
    7
  • iic通信协议原理(https协议原理)

    一、基本概念。I2C总线(I2Cbus,Inter-ICbus)是一个双向的两线连接总线,提供集成电路之间的通信线路。I2C属于一种串行扩展技术,广泛应用于电视、录像机、音频设备。I2C的意思是“完成集成电路或者功能单元之间信息交换的规范或协议”,采用一条数据线(SDA)和一条时钟线(SCL)来完成数据的传输以及外围器件的扩展。通信的原理是控制SCL和SDA的时序,时期满足总线协议从而进…

    2022年4月14日
    54
  • spss实现单因素方差分析怎么做_双因素方差分析例题

    spss实现单因素方差分析怎么做_双因素方差分析例题总目录:SPSS学习整理SPSS实现单因素方差分析目的适用情景数据处理SPSS操作SPSS输出结果分析知识点目的检验单因素水平下的一个或多个独立因变量均值是否存在显著性差异,即检验单因素各个水平的均值是否来自同一个总体。(因变量为连续变量)适用情景方差分析前提:各个总体服从正态分布各个总体方差相等观测值独立数据处理SPSS操作SPSS输出结果分析基本信息基于平均值显著性为0.729,大于0.05,认为各组总体方差相等F=8.744,显著性为0.007,小于0.

    2022年10月19日
    3
  • matlab secant method

    matlab secant method

    2021年12月16日
    50
  • DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真

    DS18B20温度传感器的工作原理_基于ds18b20的温度报警仿真数字温度传感器(DS18B20)传感器参数

    2025年12月14日
    2
  • 【流量代理】代理模式「建议收藏」

    【流量代理】代理模式「建议收藏」文章目录直连模式pac模式全局模式参考找了好几篇文章,终于找到了Pac的全称。直连模式顾名思义直连模式就是不适用任何代理的模式,这种模式下你访问网站时不会走代理ip还是你自己的。pac模式这个是大家普遍适用的一种模式全称叫(Proxyauto-config)代理自动配置模式,这种模式浏览器会根据一些配置的规则选择某个网站是否走代理。一般情况下,使用Pac模式访问国内网站不会走代理,访问国外网站会走代理,优点是节省流量。全局模式这个模式就是指所有的请求都会通过代理服务器。这种模式下虽然简单粗

    2022年10月18日
    4

发表回复

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

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