MFC中多线程的退出处理
来源:互联网 发布:mac中文游戏 编辑:程序博客网 时间:2024/04/29 17:08
在MFC中经常会遇到多个线程之间内存共享的问题,这些共享内存在分配时无甚难处,但在什么地方释放掉内存比较好呢?
下面是按下一个按钮后启动线程的代码:
OnButton()
{
sharedMem = allocate()
AfxBeginThread(Thread1,...)
AfxBeginThread(Thread2,...)
}
首先想到的是启动子线程后,就在OnButton消息响应函数等待,可在Thread1和Thread2里面设置一个标志位,当这两个线程退出后,更改相应的标志位,在OnButton里面等待两个标志位都改变后,释放内存即可,具体的应该如下所示:
OnButton()
{
sharedMem = allocate()
AfxBeginThread(Thread1,...)
AfxBeginThread(Thread2,...)
while(!(bFlagThread1Exit && bFlagThread2Exit))
{
Sleep(2);
}
release shared memory
}
UINT Thread1(...)
{
bFlagThread1Exit = false;
... //线程处理代码
bFlagThread1Exit = true;
}
UINT Thread2(...)
{
bFlagThread2Exit = false;
... //线程处理代码
bFlagThread2Exit = true;
}
看起来很完美,按完键后等待两个线程结束,但实际上 release shared memory并不会执行到,由于MFC的机制问题,程序会一直阻塞在while(!(bFlagThread1Exit && bFlagThread2Exit))循环里,反映到界面就是感觉程序界面如死机一般。
我这里给出的解决方法是,在程序线程结束后,发送消息给程序,在消息响应函数中,当查看到所有的线程都推出后,再进行释放共享资源,例如内存的操作,这里给出的方法是统计退出线程个数的方法,具体如下:
UINT Thread1(...)
{
... //线程处理代码
SendMessage(MY_THREAD_EXIT,...);
}
UINT Thread2(...)
{
... //线程处理代码
SendMessage(MY_THREAD_EXIT,...);
}
在OnButton里面,置线程退出统计变量为0;
OnButton()
{
cnt = 0;
sharedMem = allocate()
AfxBeginThread(Thread1,...)
AfxBeginThread(Thread2,...)
}
在MY_THREAD_EXIT的消息响应函数里面,当两个线程发送的退出消息都收到再进行释放内存的工作。
OnThreadExit()
{
cnt++;
if(cnt == 2)
{
release shared memory;
}
}
当然,除了例子中所举的线程计数的方法外,也可以采用其它的方法,这里就不再赘述了。
- MFC中多线程的退出处理
- 在vs10中处理多线程MFC遇到的问题
- 多核计算中多线程的退出算法
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- MFC中多线程的应用
- 多线程MFC处理视频
- MFC多线程处理:CEvent
- MFC多线程处理:CSemaphore
- MFC中闪烁的处理
- SWT中多线程的处理
- Django+python+BeautifulSoup组合的垂直搜索爬虫
- 原来那首歌是time to say goodbye
- 宝宝的第一件礼物
- pku 1847(最短路径,floyd)
- vc中一些常见错误
- MFC中多线程的退出处理
- C# Show() 与 ShowDialog()区别
- QTP关键字驱动框架 - RelevantCodes[1]One
- mysql学习笔记
- 忆8月8日“八强”数学建模
- MFC实现为窗体添加的背景图片
- 签名你的android项目
- Android的电话功能介绍
- POJ 1475 推箱子 解题报告