多线程同步问题
好人吗 2012-05-21 06:02:57 我在一个对话框中添加了一个文本框和一个按钮,在点击这个按钮之后启动一个线程在文本框上动态显示“正在连接……”,后面的小数点一个一个的显示。先贴代码:
自定义类:
struct ThreadInfo
{
BOOL m_connect;
CCsDlg m_dlg;
};
在CCsDlg类中,我做了如下修改:
protect:
ThreadInfo* info;
CWinThread* pThread;
private:
CCriticalSection m_CCritical_Section;
增加了一个一个事件处理函数:
通过IDE增加。
void CCsDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
UpdateData();
info->m_connect =FALSE;
info->m_dlg=this;
pThread=AfxBeginThread(ThreadFunc,&info);
UpdateData(FALSE);
}
增加了全局函数:
UINT ThreadFunc(LPVOID* a)
{
int i;
i=0;
ThreadInfo* temp=(ThreadInfo*)a;
temp->m_dlg.m_CCritical_Section.Lock();
temp->m_dlg.m_CStrMess="正在等待客户端连接";
while(!temp->m_connect)
{
if(6==i)
{
i=0;
}
for(int j=0;j<i;j++)
{
temp->m_dlg.m_CStrMess+=". "; //m_CStrMess和详细编辑框关联
}
temp->m_dlg.UpdateData(FALSE);
Sleep(50);
}
temp->m_dlg.m_CCritical_Section.Unlock();
return 0;
}
现在编译出错:
c:\documents and settings\administrator\桌面\cs\cs\csdlg.h(28) : warning C4150: deletion of pointer to incomplete type 'ThreadInfo'; no destructor called
c:\documents and settings\administrator\桌面\cs\cs\csdlg.h(19) : see declaration of 'ThreadInfo'
C:\Documents and Settings\Administrator\桌面\cs\cs\csDlg.cpp(22) : error C2248: 'm_CCritical_Section' : cannot access private member declared in class 'CCsDlg'
c:\documents and settings\administrator\桌面\cs\cs\csdlg.h(62) : see declaration of 'm_CCritical_Section'
C:\Documents and Settings\Administrator\桌面\cs\cs\csDlg.cpp(37) : error C2248: 'm_CCritical_Section' : cannot access private member declared in class 'CCsDlg'
c:\documents and settings\administrator\桌面\cs\cs\csdlg.h(62) : see declaration of 'm_CCritical_Section'
C:\Documents and Settings\Administrator\桌面\cs\cs\csDlg.cpp(136) : error C2582: 'CCsDlg' : 'operator =' function is unavailable
请问为什么?
我QQ37642052