WorkThread()
{
char *buff = new char[size];
............ if(!PostMessage(hMainWnd, WM_MYMESSAGE, (WPARAM)buff, 0))
delete[] buff; ............
}//如果UI Thread还没有来得及处理我的消息 就关闭了。那么这里的buff将内存泄漏。//我有两个方案,不知对不对。
//方案一: 在UI的OnClose()中,利用peekmessage来清除我的消息。
//方案二:创建一个myBuffList, 在程序退出时清除myBuffList.//第一个方案不知是否可行? 第二个方案感觉多余(有现成的系统消息队列,为什么还要自己创建list).
//请有经验的朋友给点建议。谢谢
if(!PostMessage(hMainWnd, WM_MYMESSAGE, (WPARAM)buff, 0))
delete[] buff;
这两行代码有问题,PostMessage是把消息放入目标线程的消息队列后立即返回,所以消息还没来得及响应,buff就被释放了,响应消息时很可能产生异常。应该用SendMessage,或者由消息响应函数来释放内存。