大家好,又见面了,我是你们的朋友全栈君。
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其他线程统统堵塞。
CCriticalSection类的构造函数原型例如以下:
能够发现这个类的构造函数没有參数,所以创建一个CCriticalSection类的对象很easy,仅仅有例如以下就可以:
演示样例:使用临界段编写一个有两个线程的应用程序。
1.创建单文档应用程序;
2.在视图类的实现文件里定义一个临界段对象:
3.在视图类的实现文件里定义两个线程函数:
{
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.在视图类鼠标左键消息函数编写例如以下:
{
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版)》
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162029.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...