类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
SENDMESSAGE函数不是立即返回的,那如果有多个线程同时向一个窗体发消息(用SENDMESSAGE),会不会造成这些线程的阻死?
网友回答:
有可能,应该用PostMessage.
SendMessage会造成堵塞。因为每个线程都在等待答复。但响应只能逐个处理,不能并发
线程中发消息一般用 PostMessage
响应只能逐个处理
对
是串行执行的!
这个做过试验,
最好用postmessage
全局的可以,不是全局的也可以.
你上面说的:
些时系统会报错,好像m_strinfo的地址无效了,那如何处理这个问题呢,因为m_strinfo是局部变量,所以线程一退出m_strinfo就不再有效,那如何保证消息的处理函数可以得到正确的值呢,不是用全局量吧.
是因为那个hwnd是ListCtrl,如果是Edit或Static就不会有这个问题,你试试看.
如果是,就有解决办法.
threadfunc(...)
{
cstring m_strInfo;
....
...
CString *pstrinfo = new CString();
*pstrinfo = "test info";
::postmessage(xxx.m_hwnd,mymessage,0,(LPARAM)pstrinfo);
return 1;
}
onxxxxx(wparam wparam lparam lparam)
{
CString *pInfo = (CString *)lparam;
lstXXX.insertitem(....);
....
delete pInfo;
}
代码没有测试,仅供参考!
threadfunc(...)
{
cstring m_strInfo;
....
...
m_strinfo = "test info";
char *pNewStr = new char[m_strInfo.GetLength()+1];
//new 出来的内存只有调用delete时才会释放
strcpy(pNewStr, m_strinfo.GetBuffer(0));
::postmessage(xxx.m_hwnd,mymessage,0,(LPARAM)&pNewStr);
return 1;
}
接收消息:
char *p = (char*)lParam;
TRACE("Message: %s", p);
delete []p;