多线程编程中的主界面安全处理

本文探讨了在多线程编程中直接操作主界面对象的危险性,指出这种做法可能导致死锁。作者建议避免工作线程直接操作界面,而应使用全局缓冲、锁和消息映射机制来保证线程安全。通过创建类来存储消息数据,并使用PostMessage进行通信,以避免线程冲突。
摘要由CSDN通过智能技术生成
 现在,随着多核心CPU的流行,很多开发人员,不管自己的程序是否适合用多线程,都会使用多线程编程,通常就是一个主界面线程加N个工作线程,而且,常常用单线程编程的思维来操作主界面,将某些界面对象,例如CList,传到工作线程中去,让工作线程直接操作界面对象,大多数情况下,还可以运行的挺好,没问题,但是真的没问题吗?哈,问题大了。例如
UNIT MyWorkThread(LPVOID pParam)
{
....
CList * plist;
plist=(CList *)pParam;
CString str;
int i,iresult;
for(...)
{
   //something you do
   str.Format("Hi , this is work thread :%d , current result is:%d",i,iresult);
   plist->AddString(str);
}

return 0;
}
这样的代码多的不得了,而且,在很多时候,它会正常工作的,但是,它不安全,为什么呢?很多书籍,包括WINDOWS核心编程,[当然UNIX中书籍里讲到主界面的就更少了],都没有提及,主界面的操作其实是个带锁的操作,也就是操作系统将强制保证,同一时间一个进程内最多只有一个界面操作,例如你的消息响应函数就是一个界面操作,不管你的电脑有几个CPU核心,不管你的进程有多少个工作线程,一个界面同一时间只能有一个操作࿰
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值