此种情况下应该如何与主线程同步?
我在 UI 里有一个 button,按下时开始一个线程,再按时会退出此线程。
子线程会每隔 200ms 发一个消息并传一个 CString 对象指针给主线程处理。但有时我按 button
按快了,当主线程还未处理完时,子线程已经退出,相应的临时 CString 对象被销毁掉,主线程这时正在处理的指针是无效的,造成程序异常退出。
此和情况下应该如何与主线程作同步处理?难道要把用全局 CString 对象以避免被销毁掉吗?
/* 消息处理函数 */
void CGetItDlg::OnUpdateLog(WPARAM wParam, LPARAM lParam)
{
CString str;
str = *(CString *)lParam;
m_strLog += str;
m_LogEdit.SetWindowText(m_strLog);
m_LogEdit.SetScrollPos(SB_VERT,m_LogEdit.GetLineCount(),TRUE);
m_LogEdit.LineScroll(m_LogEdit.GetLineCount(),0);
}
/* 线程处理函数 */
UINT CGetItDlg::Thread1(LPVOID lpParam)
{
static UINT i = 0;
while(1)
{
//HWND hwnd=((RECVPARA *)lpParameter)->hwnd;
HWND * hwnd=(HWND *)lpParam;
CString str;
str.Format("test %d",i++);
str += "\r\n";
::PostMessage((*hwnd),WM_UPDATE_LOG,0,(LPARAM)(&str));
if(!m_Valid) /* m_valid 与 button 相关联,为 Pin-pang 状态变量*/
break;
Sleep(200);
}
return 0;
}
问题点数:20、回复次数:2Top
1 楼flyelf(空谷清音)回复于 2006-03-14 09:00:19 得分 20
use SendMessageTop
2 楼mythay(小黑)回复于 2006-03-14 10:41:08 得分 0
你可以用一个炼表将CString链起来,每有一个就放到连标中。
当然对链表访问的时候要用到互斥两。Top




