• 在MFC下面实际演示CCriticalSection 的使用



    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);
    }

    第五步:运行测试。

     点击视图区域

    出现下面的东东

  • 相关阅读:
    双阈值对抗数据抖动
    ES6 初体验 —— gulp+Babel 搭建ES6环境
    chrome 浏览器插件开发(二)—— 通信 获取页面变量 编写chrome插件专用的库
    邮件模板——开发篇
    Java-eclipse导入jar包
    php小程序-文章发布系统(mvc框架)
    php小程序-文章发布系统
    php小项目-web在线文件管理器
    杂论—电脑远程控制
    PHP-正则表达式
  • 原文地址:https://www.cnblogs.com/wenluderen/p/4302936.html
Copyright © 2020-2023  润新知