前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关键部分CCriticalSection使用

关键部分CCriticalSection使用

作者头像
全栈程序员站长
发布2022-09-09 09:25:26
3650
发布2022-09-09 09:25:26
举报
文章被收录于专栏:全栈程序员必看

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

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

CCriticalSection()

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

CCriticalSection criticalSection;

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

CCriticalSection criticalSection;

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

代码语言:javascript
复制
     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.在视图类鼠标左键消息函数编写例如以下:

代码语言:javascript
复制
 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); 
 
} 
 

执行结果例如以下:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档