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

    第五步:运行测试。

     点击视图区域

    出现下面的东东

  • 相关阅读:
    bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】
    【20】AngularJS 参考手册
    【19】AngularJS 应用
    【18】AngularJS 包含
    【17】AngularJS Bootstrap
    【16】AngularJS API
    【15】AngularJS 输入验证
    【14】AngularJS 表单
    【13】AngularJS 模块
    【12】AngularJS 事件
  • 原文地址:https://www.cnblogs.com/wenluderen/p/4302936.html
Copyright © 2020-2023  润新知