PostThreadMessage 参数问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 11:18:34
struct info
{
CString a ;
CString b ;
};

info m_info;

我现在想把主线程中的 m_info 传到子线程中,用 PostThreadMessage行不行,怎么写,我在子线程中老是发生错误.

pThread->PostThreadMessage(WM_MYSTARTMSG, ??? ,NULL);中间怎么填?

而在我的子线程中消息响应函数
LONG CMyThread::ThreadFunc_RES(UINT wParam,LONG lParam)
{
怎么把 a,b取出???
}
TO : arbies
还是出错啊!
LONG CMyThread::ThreadFunc_RES(UINT msg, WPARAM wParam,LONG lParam)
{
AfxMessageBox("收到开始消息"); // 是可以收到消息的
struct info *pinfo = (struct info*)wParam;

AfxMessageBox(pinfo->a); // 到这里要么是乱码,要么出错
}
另外,如果用了switch(msg).那就进不了case MYSTARTMEG:里面了,不知道收的是什么消息,反正是在有的.

如果你的子线程中不需要修改m_info或者主进程需要子线程修改的话,可以这样:
首先把m_info定义成:
volatile struct info m_info;

之后在主进程中使用:
pThread->PostThreadMessage(WM_MYSTARTMSG,(WPARAM)&m_info ,(LPARAM)NULL);

而在子进程的响应函数中:
LONG CMyThread::ThreadFunc_RES(UINT msg, WPARAM wParam,LONG lParam)
{
switch(msg)
{
case WM_MYSTARTMSG:
struct info *pInfo = (struct info*)wParam;
pInfo->a = ...;
pInfo->b = ...;
break;
}