Q:CCriticalSection是什么?

A:CCriticalSection是一种线程同步策略 或者说技术 或者方法  总之呢就是这么个意思。。。。

参考资料:

http://blog.csdn.net/akof1314/article/details/5773076

http://www.cnblogs.com/hlxs/archive/2013/03/31/2991752.html

http://baike.baidu.com/view/2471016.htm

第一步:打开VS2010 创建一个单文档MFC程序。并运行 确定创建过程OK

第二步:在视图类头文件里面添加头文件#include "afxmt.h"

并在视图类的实现文件里面实例化一个CCriticalSection对象。

特别说明这个对象不属于视图类,此处是将其定义为一个全局变量。

	CCriticalSection Gsz_CriticalSection;

  

第三步:在视图里的实现文件里面 定义这两个函数。这两个函数带回会被指定为线程函数。这两个函数不是视图类的成员函数。

UINT  MessageThread1(LPVOID pParam)
{
Gsz_CriticalSection.Lock();
LPTSTR pMessage = _T("Thread1 is started");
      //AfxGetMainWnd函数获取MFC程序中的主框架类指针是一个常用作法
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
Gsz_CriticalSection.Unlock();
return 0;
}
UINT MessageThread2(LPVOID pParam)
{
Gsz_CriticalSection.Lock();
LPTSTR pMessage = _T("Thread2 is started");
//AfxGetMainWnd函数获取MFC程序中的主框架类指针是一个常用作法
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
Gsz_CriticalSection.Unlock();
return 0;
}

第四步:给视图类的添加 鼠标左键消息响应函数 函数编写如下:

注意这个需要点击如下所示,找个 左键响应函数。

void CTestGszView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
AfxBeginThread(MessageThread1, _T("Thread is started")); //启动线程1
AfxBeginThread(MessageThread2, _T("Thread is started")); //启动线程2

CView::OnLButtonDown(nFlags, point);
}

第五步:运行测试。

点击视图区域

出现下面的东东

在MFC下面实际演示CCriticalSection 的使用的更多相关文章

  1. MFC中线程相关知识

    MFC中把线程分为两种类型,UI线程和工作者线程. MFC中启动一个线程的最好方法是调用AfxBeginThread,有两个版本,一个用于启动Ui线程,另外一个用于启动工作者线程.在MFC程序中,只有 ...

  2. MFC【17-2】线程和线程同步化

    17-2线程同步 Windows支持4中类型的同步对象,可以用过来同步由并发运行的线程执行的操作: 临界区 互斥量 事件 信号量 MFC在名为CCriticalSection\CMutex\CEven ...

  3. MFC加载osg模型

    创建MFC单文档项目, OSGObject.h #pragma once #include <osgViewer\Viewer> #include <osgDB\ReadFile&g ...

  4. Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量

    使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的了解应当在其 ...

  5. CPP-基础:临界区

    VC windows api 多线程---临界区 临界区(Critical Section)是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问.如果有多个线程试图同时访问临 ...

  6. VC多线程临界区

    在使用多线程时,一般非常少有多个线程全然独立的工作.往往是多个线程同一时候操作一个全局变量来获取程序的执行结果.多个线程同一时候訪问同一个全局变量,假设都是读取操作,则不会出现故障. 假设是写操作,则 ...

  7. GDI+学习笔记(九)带插件的排序算法演示器(MFC中的GDI+实例)

    带插件的排序算法演示器 请尊重本人的工作成果,转载请留言.并说明转载地址,谢谢. 地址例如以下: http://blog.csdn.net/fukainankai/article/details/27 ...

  8. mfc动态演示排序算法

    实现的排序算法 冒泡排序.选择排序.快速排序 具体实现 选用mfc中的单文档框架 ①SetTimer函数的用法. ②使用画笔画直线. ③使用FillSolidRect()函数覆盖某一矩形区域内的内容: ...

  9. MFC 多线程

    MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息   队列和消息循环. 工作者线程没有消息机制,通 ...

随机推荐

  1. dm8127之核间通信syslink

    Last updated: June 23, 2010 Contents [hide] 1 About SysLink 1.1 SysLink Architecture 1.2 SysLink Usa ...

  2. __del__()

    __del__() 是类的内置函数,用于定义在脚本退出之前要执行的代码,因为有这个特性,通常被用来在脚本退出前关闭文件.关闭数据库连接.关闭网络连接等操作 [root@localhost ~]$ ca ...

  3. U盘重装Windows系统

    1.制作一个U盘老毛桃或者大白菜 2.进入BIOS 3.Secure Boot-Disabled,作用是关闭微软的Secure BOOT,这个功能开启会导致不能识别U盘启动系统的安装 4.Lauch ...

  4. SensorManager

    光照传感器 Android 中每个传感器的用法其实都比较类似,真的可以说是一通百通了.首先第一步要获取到 SensorManager 的实例 SensorManager senserManager = ...

  5. 获取UIWebView的内容高度

    本文转载至 http://i.cnblogs.com/EditPosts.aspx?opt=1   #pragma mark - UIWebview delegete - (void)webViewD ...

  6. IOS7开发~新UI学起(一)

    本文转载至:http://blog.csdn.net/lizhongfu2013/article/details/9124893 IOS7在UI方面发生了很大改变,所以感觉有必要重新审视的学习一下(新 ...

  7. jqGrid设置符合条件的行选中

    1.描述:在loadComplete的时候,符合zoneCode列不为null的被选中,第一列为zoeCode2.问题:已经获取到zoneCode不为null的列,但是该行一直没有选中.3.截图:4. ...

  8. 666:放苹果(划分dp)

    666:放苹果 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示 ...

  9. 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  10. python 学习源

    入门 w3cschool https://www.w3cschool.cn/python/ 菜鸟教程(支持在线编程) http://www.runoob.com/python/python-tutor ...