多线程-临界区模式
作者:邵盛松 2008年12月13日
临界区作用:保护一段代码不被多于一个线程访问
CCriticalSection类,需要头文件afxmt.h
比如
CCriticalSection critical_section;
void function()
{
critical_section.Lock ();
语句A,B,C
critical_section.Unlock ();
}
当函数第一次被调用时,语句A,B,C开始执行.
当函数第二次被调用时,语句A,B,C必须第一次调用时执行完毕,才开始执行第二次
用实例体会临界区
在CMultiThreadDlg.cpp文件中的头文件下面声明
新建一个MFC基于对话框的应用程序,名称为MultiThread
为CMultiThreadDlg类中添加一个静态的成员函数ThreadOne.
public:static UINT ThreadOne(LPVOID pParam);
在
添加一个编辑框,控件类型是CEdit,名称是m_EditTest和一个按钮
函数的实现如下
UINT CMultiThreadDlg::ThreadOne(LPVOID pParam)
{
CString g_strTest
CEdit *pEdit=(CEdit*)pParam;
critical_section.Lock ();
for(int i=0;i<10;i++)
{
g_strTest.Format(_T("%d"),i);
pEdit->SetWindowTextW(g_strTest);
Sleep(100);
}
critical_section.Unlock ();
return 0;
}
为按钮添加事件处理代码如下
AfxBeginThread(ThreadOne,
&m_EditTest,
THREAD_PRIORITY_NORMAL,
0,
0);
生成exe文件之后,启动程序,多次点击按钮查看编辑框的内容
critical_section.Lock ();
critical_section.Unlock ();
当代码中无下面语句时,文本框显示混乱,有上面语句时文本框有序的显示数字
在VC++2005,windows2003下编译通过