首先,来分析一个假设的场景:
如果PostMessage传递的是一些在栈区的变量,PostMessage后把这些数据传到另一个线程的消息队列里,但
由于是栈区上的变量在PostMessage所在函数返回时由系统回收,那么另一线程就会访问不了这些数据。
解决办法:在传送线程PostMessage消息前对栈区上的数据new一份放到堆区上,堆区的数据是程序员手动创
建和手动回收的,然后把这些数据传送到另一线程,由另一线程去手动释放delete。
问题的产生:由于工作线程处理的繁忙,有一些数据在UI线程退出时还没返回,当UI线程退出后,数据返回
由工作线程PostMessage到UI线程,UI线程已经接收不到消息,故未能手动释放工作线程传过来的堆区内存,
造成内存泄漏。
后来,查到如下网站:
http://stackoverflow.com/questions/3807945/mfc-data-forwarding-to-main-thread-via-postmessage
发现PostMessage是有返回值的,发送失败返回false。
故上面的问题有了解决方法:
UI线程(接收线程)退出后工作线程(发送线程)PostMessage是返回false的,故可以利用这个返回值来决定由哪个线程来释放这段
PostMessage中传递的内存,如果传送失败,则由当前PostMessage的线程负责手动回收,如果发送成功就由
接收线程来负责手动回收。