在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);
}
第五步:运行测试。
点击视图区域
出现下面的东东
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了