MFC多线程同步问题
来源:互联网 发布:android系统相机源码 编辑:程序博客网 时间:2024/05/19 20:43
线程同步的方法很多,最常用的用互斥(CMutex)、临界(CritiacalSection)、信号量(Semaphone)、事件(Event)等,这四种方式分别在Win32和MFC下各有一种实现,MFC方式是对Win32方式的封装,使用起来更加方便。
以Critical Section为例:
Win32方式:
// 临界区结构对象
CRITICAL_SECTION g_cs;
// 共享资源
char g_cArray[10];
UINT ThreadProc10(LPVOID pParam)
{
// 进入临界区
EnterCriticalSection(&g_cs);
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[i] = 'a';
Sleep(1);
}
// 离开临界区
LeaveCriticalSection(&g_cs);
return 0;
}
UINT ThreadProc11(LPVOID pParam)
{
// 进入临界区
EnterCriticalSection(&g_cs);
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[10 - i - 1] = 'b';
Sleep(1);
}
// 离开临界区
LeaveCriticalSection(&g_cs);
return 0;
}
……
void CSample08View::OnCriticalSection()
{
// 初始化临界区
InitializeCriticalSection(&g_cs);
// 启动线程
AfxBeginThread(ThreadProc10, NULL);
AfxBeginThread(ThreadProc11, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(g_cArray);
AfxMessageBox(sResult);
}
MFC方式:
// MFC临界区类对象
CCriticalSection g_clsCriticalSection;
// 共享资源
char g_cArray[10];
UINT ThreadProc20(LPVOID pParam)
{
// 进入临界区
g_clsCriticalSection.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[i] = 'a';
Sleep(1);
}
// 离开临界区
g_clsCriticalSection.Unlock();
return 0;
}
UINT ThreadProc21(LPVOID pParam)
{
// 进入临界区
g_clsCriticalSection.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[10 - i - 1] = 'b';
Sleep(1);
}
// 离开临界区
g_clsCriticalSection.Unlock();
return 0;
}
……
void CSample08View::OnCriticalSectionMfc()
{
// 启动线程
AfxBeginThread(ThreadProc20, NULL);
AfxBeginThread(ThreadProc21, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(g_cArray);
AfxMessageBox(sResult);
}
- MFC多线程同步问题
- MFC 线程创建、多线程、及多线程间的同步问题
- MFC多线程同步方法
- MFC多线程同步方法
- MFC多线程同步方法
- MFC多线程同步方法
- MFC多线程同步方法
- MFC 多线程同步方法
- C++多线程同步技术(MFC)
- MFC 多线程及线程同步
- C++多线程同步技术(MFC)
- MFC 多线程及线程同步
- MFC 多线程及线程同步
- MFC多线程及线程同步
- MFC 多线程及线程同步
- MFC 多线程及线程同步
- MFC 多线程及线程同步
- MFC 多线程及线程同步
- SQLCE数据库的使用
- 关于支付宝接口出现的ILLEGAL_ARGUMENT错误原因
- html文本框控件的常用属性、事件和方法
- Rails、Ruby、JAVA前景比较
- 年龄区间查询SQL
- MFC多线程同步问题
- C#中的线程操作
- maven java 开发 必要的工具
- 首信易支付的RSA公钥验证问题(博屎没解决的问题)
- linux服务大全
- sql2k8远程连接
- vb。net 的treeview控件引用 系统imagelist图标,或者调用资源文件的图标
- gobal.css
- CSS链接引入经验