在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对象。

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

1
CCriticalSection Gsz_CriticalSection;

  

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

1
2
3
4
5
6
7
8
9
10
11
12
13
UINT  MessageThread1(LPVOID pParam)
{
    Gsz_CriticalSection.Lock();
    LPTSTR pMessage = _T("Thread1 is started"); <br>      //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();<br> ::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK); <br>Gsz_CriticalSection.Unlock(); <br>return 0; <br>}

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

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

 

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

第五步:运行测试。

 点击视图区域

出现下面的东东

 

posted @   wenluderen  阅读(4769)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示