临界段CCriticalSection的使用
来源:互联网 发布:av淘宝最新地址获取 编辑:程序博客网 时间:2024/05/16 15:45
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。临界区在控制一次只有一个线程修改数据或其它的控制资源时非常有用。例如,在链表中增加一个结点就只允许一次一个线程进行。通过使用CCriticalSection对象来控制链表,就可以达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了运行线程的权力,而把其他线程统统阻塞。
CCriticalSection类的构造函数原型如下:
CCriticalSection()
可以发现这个类的构造函数没有参数,所以创建一个CCriticalSection类的对象非常简单,只有如下即可:
CCriticalSection criticalSection;
示例:使用临界段编写一个有两个线程的应用程序。
1.创建单文档应用程序;
2.在视图类的实现文件中定义一个临界段对象:
CCriticalSection criticalSection;
3.在视图类的实现文件中定义两个线程函数:
UINT MessageThread1(LPVOID pParam)
{
criticalSection.Lock();
LPTSTR pMessage = _T("Thread1 is started");
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
criticalSection.Unlock();
return 0;
}
UINT MessageThread2(LPVOID pParam)
{
criticalSection.Lock();
LPTSTR pMessage = _T("Thread2 is started");
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
criticalSection.Unlock();
return 0;
}
{
criticalSection.Lock();
LPTSTR pMessage = _T("Thread1 is started");
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
criticalSection.Unlock();
return 0;
}
UINT MessageThread2(LPVOID pParam)
{
criticalSection.Lock();
LPTSTR pMessage = _T("Thread2 is started");
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
criticalSection.Unlock();
return 0;
}
4.在视图类鼠标左键消息函数编写如下:
void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
AfxBeginThread(MessageThread1, _T("Thread is started")); //启动线程1
AfxBeginThread(MessageThread2, _T("Thread is started")); //启动线程2
CView::OnLButtonDown(nFlags, point);
}
{
AfxBeginThread(MessageThread1, _T("Thread is started")); //启动线程1
AfxBeginThread(MessageThread2, _T("Thread is started")); //启动线程2
CView::OnLButtonDown(nFlags, point);
}
运行结果如下:
参考资料:
1.临界段类(CCriticalSection)——MFC http://blog.sina.com.cn/s/blog_627ebfc30100itd9.html
2.《MFC Windows应用程序设计(第2版)》
0 0
- 临界段CCriticalSection的使用
- 临界段CCriticalSection的使用
- 临界段CCriticalSection的使用
- 临界段CCriticalSection的使用
- 临界段类(CCriticalSection)——MFC
- 临界段类(CCriticalSection)——MFC
- 临界段类(CCriticalSection)——MFC
- 使用MFC的CCriticalSection类来实现操作临界区
- CCriticalSection临界区的使用方法
- CCriticalSection类的使用
- CCriticalSection的使用
- CCriticalSection类的使用
- CCriticalSection的使用
- CCriticalSection的使用
- CCriticalSection临界区
- 使用CCriticalSection类的注意事项
- 临界区(临界段)的含义
- win32临界代码段使用
- QT 播放flash出现空白间距问题的解决
- Debian7.4 sources
- 【C解析之十二】C语言 printf 的秘密
- 城市里的手艺人
- 网站用户行为数据统计与分析之二:数据写入mongodb
- 临界段CCriticalSection的使用
- Mac之Git/GitHub使用(3)——Fork A Repo
- ZOJ 1951
- 递归函数的解题思路
- WEB2.0技术
- iOS开发(4)UITextField
- JAVA中获取当前系统时间
- 《C++Primer4》附录-标准库io库的使用
- ZOJ 1188