MFC线程同步—— CCriticalSection类使用
来源:互联网 发布:天策脸型数据 编辑:程序博客网 时间:2024/06/07 16:09
多个线程访问临界区时,可以使用临界区对象。临界区对象是一个独占性共享资源,任一时刻只有一个线程可以拥有临界区。拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止。
CCriticalSection类的用法:
方法一:
(1)定义CCriticalSection类的一个全局对象(以使各个线程均能访问):
CCriticalSectioncritical_section;
(2)在访问临界区之前,调用CCriticalSection类的成员函数Lock()获得临界区:
critical_section.Lock();
在线程中调用该函数来使线程获得它所请求的临界区。如果此时没有其他线程占有临界区,则调用Lock()的线程获取临界区;否则,线程即将挂起,并放入到一个系统队列中等待,直到当前拥有临界区的线程释放了临界区时为止。
(3)在本线程中访问临界区中的共享资源。
(4)访问临界区完毕后,使用CCriticalSection类的成员函数UnLock()来释放临界区:
critical.section.UnLock();
方法二:
与同步辅助类CSingleLock或CMutiLock类一起使用
(1)定义CCriticalSection类的一个全局对象(以使各个线程均能访问):
CCriticalSection critical_section;
(2)在访问临界区之前,定义CSingleLock类的一个对象,并将critical_section的地址传送给构造函数:
CSingleLocksinglelock(&critical_section);
(3)使用CSingleLock类的成员函数Lock()请求获得临界区:
singlelock.Lock();
(4)在本线程中访问临界区中的共享资源。
(5)调用CSingleLock类的成员函数UnLock()来释放临界区:
singlelock.UnLock();
方法一:
定义一个CCriticalSection类的一个全局变量和一个共享资源的字符数组g_ArrayCCriticalSection critical_section;TCHAR g_Array[10] = _T("\0");定义2个线程,共享g_Array数组资源UINT WriteA(LPVOID pParam);UINT WriteB(LPVOID pParam);
//pParam为创建afxBeginThread()函数的第二个参数UINT WriteA(LPVOID pParam) {CEdit *pEdit = (CEdit*)pParam; //pEdit为控制EDITA编辑框pEdit->SetWindowText(_T("")); critical_section.Lock(); //上锁//临界区for (int i = 0; i < 9; i++){g_Array[i] = _T('A');pEdit->SetWindowText(g_Array);Sleep(1000);}critical_section.Unlock();//解锁return 0;}UINT WriteB(LPVOID pParam){CEdit *pEdit = (CEdit*)pParam;pEdit->SetWindowText(_T("\0"));critical_section.Lock();//临界区资源(g_Array)for (int i = 0; i < 9; i++){g_Array[i] = _T('B');pEdit->SetWindowText(g_Array);Sleep(1000);}critical_section.Unlock();return 0;}
//按钮启动线程Avoid CThreadLockDlg::OnBnClickedWritea(){// TODO: 在此添加控件通知处理程序代码AfxBeginThread(WriteA, &m_CEditA); //参数表示EDIT控件变量}//启动线程Bvoid CThreadLockDlg::OnBnClickedWriteb(){// TODO: 在此添加控件通知处理程序代码AfxBeginThread(WriteB, &m_CEditB);}
- MFC线程同步—— CCriticalSection类使用
- 使用CCriticalSection 类进行线程同步
- [MFC]同步对象——CCriticalSection临界区,CSemaphore信号量
- 临界段类(CCriticalSection)——MFC
- 临界段类(CCriticalSection)——MFC
- 临界段类(CCriticalSection)——MFC
- 线程同步 CCriticalSection(临界区类)
- 线程同步 CCriticalSection(临界区类)
- 使用MFC的CCriticalSection类来实现操作临界区
- CCriticalSection类的使用
- CCriticalSection类的使用
- MFC线程同步——CEvent的使用
- C++线程同步 CCRITICALSECTION(临界区类)附自己写的测试代码
- 使用CCriticalSection类的注意事项
- MFC多线程 —— 线程同步
- MFC多线程 —— 线程同步
- 多线程编程5 线程同步_临界区(CCriticalSection)
- MFC(2)MFC中使用信号量(semaphore)做线程同步——用户启动子线程打开串口
- 避免野指针
- xcode创建静态库1
- 集合框架
- git学习-创建仓库克隆仓库
- Eclipse开发快捷键记录
- MFC线程同步—— CCriticalSection类使用
- C++ static的总结
- 笔记
- C语言调用MATLAB引擎使用体会
- 数组的知识点
- 1218.纪念邮票
- 获取当前页面 URL
- ios 视图的淡入淡出
- java Service Wrapper 将jar注册为windows系统服务